我在elasticsearch 5.6中对多值和嵌套字段使用聚合时遇到了一个非常特殊的问题,我的索引映射如下:
{
"my_index": {
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"country": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
}
}
}
}
}
}
我的数据是这样的:
"my_field": [
{"name": "apple", "country": "USA"},
{"name": "alibaba", "country": "CHINA"}
]
要求是:我得到一个查询词,例如苹果,我使用此查询字搜索已归档的名称,最后,我想汇总国家/地区 名称是查询字 apple 。我的查询如下:
{"query": {
"nested": {"path": "my_field", "query": {"bool": {"should": [{"match": {"my_field.name.keyword": "apple"}}]}}}},
"aggs": {"m_agg": {"nested": {"path": "my_field"},
"aggs": {"m1_agg": {"terms": {"field": "my_field.country.keyword"}}}}}}
因此输入为 apple ,期望结果为
"aggregations" : {
"m_agg" : {
"doc_count" : 1,
"m1_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "USA",
"doc_count" : 1
}
]
}
}
}
但是弹性搜索会返回结果:
"aggregations" : {
"m_agg" : {
"doc_count" : 2,
"m1_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "USA",
"doc_count" : 1
},
{
"key" : "CHINA",
"doc_count" : 1
}
]
}
}
}
如何更改查询DSL,以获得预期结果?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果需要对特定过滤值应用聚合。您必须在聚合中使用过滤器。
在Elastic中,单独编写的查询/过滤器和聚合将单独生成,而不相互依赖。