如何过滤ElasticSearch结果而不影响文档评分?

iezvtpos  于 2023-02-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(137)

我试图过滤我的结果“publication_year”字段,但我不希望它影响文档的分数,但如果我添加“范围”到查询或“过滤器”,它似乎会影响分数和评分较高的文档,其“publication_year”更接近“lte”或“小于等于”的上限在“范围”。
我的疑问:

query = {
                
                'bool': {
                    'should': [
                        {
                            'match_phrase': {
                                "title": keywords
                            }
                        },
                        {
                            'match_phrase': {
                                "abstract": keywords
                            }
                        },
                    ]
                }
                        
            }
            if publication_year_constraint:
                range_query = {"range":{"publication_year":{"gte":publication_year_constraint, "lte": datetime.datetime.today().year}}}
                query["bool"]["filter"] = [range_query]

尝试将“range”也放在“should”块中,结果类似。

bvpmtnay

bvpmtnay1#

尝试使用"筛选器上下文"。
在筛选器上下文中,查询子句会回答"此文档是否与此查询子句匹配?"问题,答案很简单:是或否-不计算分数。
示例:

{ 

 "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [ 
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2015-01-01" }}}
      ]
    }
  }
}

相关问题