Boost会根据doc字段的字符串值生成Elasticsearch

时间:2015-08-31 10:51:25

标签: function search boost elasticsearch

我有一个Elasticsearch映射,其中包含语言代码的字段,例如EN,DE,ES,FR等。如果用户开始用英语搜索,我想提高搜索结果中的所有英文文档;法语,西班牙语,德语等也一样。

我想,script_score是要走的路:

"script_score" : {
    "script" : "_score * doc['my_numeric_field'].value"
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-script-score

但是,我需要比较每个索引文档的语言代码。将LANG作为用户的当前语言代码,可能如下所示:

"script_score" : {
    "script" : "_score * ("+LANG+" == doc['lang'].value ? 2 : 1)"
}

这里的本质是一个三元运算符,以便在语言与当前用户的语言匹配的情况下以两倍的方式提升有问题的文档:

LANG == doc['lang'] ? 2 : 1

到目前为止,任何此类功能都被ES忽略了。

1 个答案:

答案 0 :(得分:1)

使用function_score,更具体地说script_score确实是可行的方法。我这样做的方法是使用一个名为LANG的参数,您可以使用当前用户的语言进行初始化(例如下面的"LANG": "EN")。然后,您的脚本只需要将文档的lang字段与LANG参数进行比较,然后将得分乘以2而不是1。

     {
      "script_score": {
        "script": "_score * (doc.lang.value == LANG ? 2 : 1)",
        "params": {
          "LANG": "EN"
        }
      }