在 Elasticsearch 中,如何在不影响分数的情况下将多个过滤器与 OR 组合?
In Elasticsearch, how do I combine multiple filters with OR without affecting the score?
在 Elasticsearch 中,我想使用 OR 聚合的两个不同子句来过滤我的结果,例如return PropertyA=true 或 PropertyB=true 的文档。
我一直在尝试使用 bool query 来做到这一点。我的基本查询只是 must
中的文本搜索。如果我将这两个子句都放在 filter
出现类型中,它会使用 AND 聚合它们。如果我将两个子句都放在 should
出现类型中并将 minimum_should_match
设置为 1,那么我会得到正确的结果。但是,同时满足这两个条件的文档会获得更高的分数,因为“应该”在查询上下文中运行。
如何过滤仅匹配两个条件之一的文档,而不增加同时匹配两个条件的文档的分数?
提前致谢
您需要利用 constant_score
query,所以一切都在过滤器上下文中运行:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"term": {
"PropertyA": true
}
},
{
"term": {
"PropertyB": true
}
}
]
}
}
}
}
}
在 Elasticsearch 中,我想使用 OR 聚合的两个不同子句来过滤我的结果,例如return PropertyA=true 或 PropertyB=true 的文档。
我一直在尝试使用 bool query 来做到这一点。我的基本查询只是 must
中的文本搜索。如果我将这两个子句都放在 filter
出现类型中,它会使用 AND 聚合它们。如果我将两个子句都放在 should
出现类型中并将 minimum_should_match
设置为 1,那么我会得到正确的结果。但是,同时满足这两个条件的文档会获得更高的分数,因为“应该”在查询上下文中运行。
如何过滤仅匹配两个条件之一的文档,而不增加同时匹配两个条件的文档的分数?
提前致谢
您需要利用 constant_score
query,所以一切都在过滤器上下文中运行:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"term": {
"PropertyA": true
}
},
{
"term": {
"PropertyB": true
}
}
]
}
}
}
}
}