function - 根据doc字段的字符串值在Elasticsearch中 boost 结果

标签 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都忽略了任何此类功能。

最佳答案

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

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

关于function - 根据doc字段的字符串值在Elasticsearch中 boost 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32309565/

相关文章:

c++ - 您可以在 boost asio 中设置 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项吗?

php - 是否可以在 Silverstripe 模板变量上运行一个函数来格式化输出?

javascript - jquery 中的控件不返回函数

mysql - 如何在mysql函数中返回

java - 我需要使用 Java 创建搜索引擎的帮助

java - 数组和数组列表之间的搜索方法存在问题

c++ - boost 属性树 毫无意义的错误路径

c - void* 函数指针数组转换

elasticsearch 术语查询不起作用

c++ - ublas:将 ublas::vector 包装为 ublas::matrix_expression