【发布时间】:2019-05-07 16:01:04
【问题描述】:
我要匹配满足以下所有条件的文档:
- 作者 == “汤姆”
- 状态!=“已删除”
-
至少有两个
f1-f4字段与给定值匹配
(所有字段均为keyword)
{"size":24,
"query":{
"bool":{
"filter":[{"term":{"author":{"value":"tom","boost":1.0}}}],
"must_not":[{"term":{"status":{"value":"deleted","boost":1.0}}}],
"should":[
{"term":{"f1":{"value":"v1","boost":1.0}}},
{"term":{"f2":{"value":"v2","boost":1.0}}},
{"term":{"f3":{"value":"v3","boost":1.0}}},
{"term":{"f4":{"value":"v4","boost":1.0}}}
],
"minimum_should_match":"2",
"boost":1.0
}}
}
更新和总结
我上面发布的查询实际上是正确的,但是我的 es 提供程序安装了一个错误的自定义插件来执行“查询优化”,这导致所有“minimum_should_match”被忽略。如果你遇到同样的问题,找不到任何线索,也许你应该检查你是否安装了任何可疑的插件
【问题讨论】:
-
更新中的一切看起来都很好,我似乎无法复制您的测试用例,您是否有机会将
explain: true添加到您的查询中,看看那里是否有任何可疑之处?由于从字符串类型移动,这些值可能被不正确地索引?
标签: elasticsearch elasticsearch-query