提升对 Elasticsearch 中的布尔过滤查询没有影响

Boosting has no effect in a Boolean-filtered query in Elasticsearch

我正在尝试为与术语过滤器匹配的文档添加提升。基础是 Boolean/MatchAll 查询。但是我的 Elasticsearch 查询中的提升没有效果。所有结果分数设置为 1:

curl -XPOST localhost:9200/wiki_content/_search?pretty -d '
{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "title.keyword": {
                    "value": "Main Page",
                    "boost": 9
                  }
                }
              },
              {
                "term": {
                  "title.keyword": {
                    "value": "Top Page",
                    "boost": 999
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
'

但是,当使用 filtered 查询时,提升有效。但是由于我系统的限制,我不能使用过滤查询。那么有什么方法可以使原始查询中的提升起作用吗?

在查询的过滤器部分,提升将不起作用,因为过滤器的唯一工作是,嗯,过滤匹配特定值的查询。请尝试:

curl -XPOST localhost:9200/wiki_content/_search?pretty -d '
{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "should": [
        {
          "term": {
            "title.keyword": {
              "value": "Main Page",
              "boost": 9
            }
          }
        },
        {
          "term": {
            "title.keyword": {
              "value": "Top Page",
              "boost": 999
            }
          }
        }
      ]
    }
  }
}
'

...将两个 term-queries 直接移动到顶级 bool 查询中的 should-clause 中。