我使用easlticsearch 6.
使用过滤器查询:
"query":{
"bool":{
"must":[{
"bool":{
"minimum_should_match":1,
"should":[
{"wildcard":{"header":"*hello*"}},
{"wildcard":{"body":"*hello*"}}
]
}
}],
"filter":[{
"bool":{
"must":[
{"terms":{"puid":["user1"]}},
{"terms":{"fid":["user1-1519812713"]}}
]
}
}]
}
}
不带过滤器的查询:
"query":{
"bool":{
"must":[
{"term":{"puid":"user1"}},
{"terms":{"fid":["user1-1519812713"]}},
"bool":{
"minimum_should_match":1,
"should":[
{"wildcard":{"header":"*hello*"}},
{"wildcard":{"body":"*hello*"}}
]
}}
]
}
}
当我使用curl测量两个查询的性能时: curl -w'\ ntime_total:%{time_total} \ n'-H'Content-Type:application / json'-XGET -d'{}':9200 / store / msg / _search?routing = user1
我获得查询的总时间 没有过滤器:1.134,1.237,1.107 带过滤器:1.322,1.445,1.316
我希望带有过滤器的查询提供更好的性能,因为它不需要计算得分,而且可以缓存。 Elastic还建议在bool查询中进行过滤。
答案 0 :(得分:0)
首先,您在第二个查询上执行不同的查询。
在您用于terms
的第一个中,在第二个中您使用了一个term
和一个terms
。虽然这不应该具有重要意义,但您可以使用与基准测试完全相同的查询。
此外,您的过滤器查询使用了我认为导致问题的内部bool查询。尝试将其更改为
"filter": [
{"terms":{"puid":["user1"]}},
{"terms":{"fid":["user1-1519812713"]}}
]
此外,您可以查看Profile API以了解有关查询的更多详细信息