【发布时间】:2018-03-19 21:18:13
【问题描述】:
我使用 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.454、1.316
我希望带有过滤器的查询提供更好的性能,因为它不需要计算分数,并且可以缓存。 Elastic 还建议在布尔查询中使用过滤器。
【问题讨论】:
-
尝试这样做:"filter": [ {"terms":{"puid":["user1"]}}, {"terms":{"fid":["user1 -1519812713"]}} ]
-
谢谢。我试了一下。时间成本差不多:1.339 1.462 1.327
-
我在下面添加了一个答案。检查配置文件 api 了解更多信息。对于本地主机中的简单查询,结果和数据很少,那么您不能指望这些结果会向您展示真实情况,用于端到端基准测试,但您可以检查内部结构(配置文件 api)并查看发生在那里。即使您的请求的反序列化也会严重影响结果
标签: elasticsearch search filter