elasticsearch 如何将boost添加到某个字段等于某个值的solr文档中?

sh7euo9m  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(162)

我希望将来自某些国家a地区(比如阿联酋和埃及)的所有文档提升500倍。请注意,此系数必须相乘,而不是相加,因此我不能使用bq。
我目前的解决方案是使用:

&boost=map(sum(termfreq(countryname,UAE),termfreq(countryname,Egypt)),0,0.1,1,500)

如果文档来自UAE或Egypt,则termfreq返回大于0的值,sum返回大于0的值,map返回boost值500。
然而,有了这个,我在提升名称中有空格的国家时遇到了麻烦。例如,沙特阿拉伯。

&boost=map(sum(termfreq(countryname,Saudi Arabia)),0,0.1,1,500)
&boost=map(sum(termfreq(countryname,Saudi+Arabia)),0,0.1,1,500)
&boost=map(sum(termfreq(countryname,Saudi%20Arabia)),0,0.1,1,500)

以上都给出了错误。
我也试过

&boost=map(sum(termfreq(countryname,Arabia)),0,0.1,1,500)

但这并没有增加沙特阿拉伯提交的文件。
请在这里提出解决方案。任何帮助将不胜感激。

xiozqbni

xiozqbni1#

Tldr;

我听起来像你需要的function score query
function_score可让您修改查询所撷取之文件的分数。例如,如果分数函数的计算成本很高,但足以计算一组已筛选文件的分数,则此功能会很有用。

溶液

以下请求应能帮助您响应您的需求。

GET /_search
{
  "query": {
    "function_score": {
      "query": { "match_all": {} },
      "functions": [
        {
          "filter": { "terms": { "countryname": ["Saudi Arabia", "UAE"] } },
          "script_score": {
            "script": {
              "source": "500"
            }
          }
        }
      ],
      "score_mode": "multiply"
    }
  }
}

相关问题