【发布时间】:2017-09-12 22:53:12
【问题描述】:
我在从弹性搜索 1.5 迁移到 5.1 时遇到问题。 以下是我的弹性搜索 - 1.5 查询:
{
"_source":["_id","spotlight"],
"query":{
"filtered":{
"filter":{
"and":[
{"term":{"gender":"female"}},
{"range":{"lastlogindate":{"gte":"2016-10-19 12:39:57"}}}
]
}
}
},
"filter":{
"and":[
{"term":{"maritalstatus":"1"}}
]
},
"sort":[{"member2_dummy7":{"order":"desc"}}],
"size":"0",
"aggs": {
"maritalstatus": {
"filter": {},
"aggs" : {
"filtered_maritalstatus": {"terms":{"field":"maritalstatus","size":5000}}
}
}
}
}
此查询在聚合中为我提供了正确的 doc_count。此 doc_count 是根据查询上下文返回的结果集计算得出的,它会忽略过滤器上下文。
我在弹性搜索 5.1 中编写了相同的查询:
{
"_source":["_id","spotlight"],
"query":{
"bool":{
"must":[
{"term":{"gender":"female"}},
{"range":{"lastlogindate":{"gte":"2016-10-19 12:39:57"}}}
],
"filter":{
"bool":{
"must":[
{"term":{"maritalstatus":"1"}}
]
}
}
}
},
"sort":[{"member2_dummy7":{"order":"DESC"}}],
"size":"0",
"aggs": {
"maritalstatus": {
"filter": {},
"aggs" : {
"filtered_maritalstatus": {"terms":{"field":"maritalstatus","size":5000}}
}
}
}
}
但在弹性搜索 5.1 中,它在聚合中返回错误的 doc_count。我认为它在查询上下文中使用过滤器,因此它返回错误的 doc_cout。有人能告诉我在弹性搜索 5.1 中分离查询和过滤的正确方法吗?
【问题讨论】:
-
检查您在 1.5 中的第一个术语查询,您正在寻找
female,在 5.1 中您正在寻找Female。这在term查询中很重要。因此,将5.1中的术语查询从Female更改为female并检查结果。另请查看5.1查询中的时间戳5 seconds大于1.5查询中的时间戳。
标签: elasticsearch aggregation elasticsearch-5