在Elasticsearch中,我想用两个不同的子句来过滤我的结果,这些子句用OR聚合,例如用PropertyA=true或PropertyB=true返回文档。
我一直在尝试使用bool query来做这件事。我的基本查询只是must中的一个文本搜索。如果我将这两个子句都放在filter实例类型中,它会用AND将它们聚合在一起。如果我将这两个子句都放在should实例类型中,并将minimum_should_match设置为1,那么我就会得到正确的结果。但是,同时满足两个条件的文档会得到更高的分数,因为“应该”是在查询上下文中运行的。
如何筛选出只符合两个条件中的任何一个的文档,而不增加同时满足两个条件的文档的分数?
提前感谢
发布于 2021-09-16 03:46:37
您需要利用constant_score query,因此所有内容都在过滤器上下文中运行:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"term": {
"PropertyA": true
}
},
{
"term": {
"PropertyB": true
}
}
]
}
}
}
}
}https://stackoverflow.com/questions/69201499
复制相似问题