当前位置: 首页 > 知识库问答 >
问题:

基于doc字段字符串值的Elasticsearch中Boost结果

公孙俊弼
2023-03-14

我有一个弹性搜索映射,包含一个语言代码的字段,如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个答案

巴帅
2023-03-14

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

     {
      "script_score": {
        "script": "_score * (doc.lang.value == LANG ? 2 : 1)",
        "params": {
          "LANG": "EN"
        }
      }
 类似资料:
  • 我在映射中设置了一个日期字段,如下所示: 在我的应用程序中,字段group psAssignedDate最初设置为空字符串。分配组时,将生成unix时间戳并将其存储在字段中。我试图使用elasticsearch的批量更新功能来引入一组带有“AssignedDate”的文档,因为还没有分配组。不过,Elasticsearch不会对文档进行索引。这在日志文件中: 弹力搜索似乎支持JSON空值...我需

  • 我有一个如下所示的ElasticSearch查询: 和像这样的文件作对。 因此,我能够根据文档名称和搜索名称与我的查询的接近程度来检索文档。 要求是,文本搜索框应该检索与查询匹配的最接近的名称,但是,如果给定相对相似的名称,在过去的时间段内投诉数量超过10的文档在搜索结果中的显示应该高于那些少于10的文档。 因此,我需要传递一个时间段的关键字,例如“01/01/2001-31/12/2001”,如

  • 需要在ElasticSearch中找到一种方法,以基于某个字段的特定值来提高文档的相关性。具体地说,在我的所有文档中都有一个特殊的字段,该字段值越高,包含该字段的文档就越相关,无论搜索如何。 考虑以下文档结构: 我希望具有较高boosting_field值的文档在本质上比具有较低boosting_field值的文档更相关。这只是一个起点--在确定搜索中每个文档的最终相关性得分时,还将考虑查询与其他

  • 问题内容: 需要在ElasticSearch中找到一种方法来根据字段的特定值来提高文档的相关性。具体来说,我所有文档中都有一个特殊字段,该字段值越高,包含该文档的文档就越相关,而与搜索无关。 考虑以下文档结构: 我希望boosting_field值较高的文档与那些boosting_field值较低的文档 本质上相关性 更高。这只是一个起点- 在确定搜索中每个文档的最终相关性分数时,还将考虑查询与其

  • 问题内容: 我在使用sql时遇到问题。我想加入两个表,雇员和班主任。条件是员工具有诸如“ u0871457”之类的unid列,其中作为班主任的EmplId为“ 00871457”。 我只想将EmplId的第一个字符替换为’u’即可加入,以匹配来自unid的字符串。我怎样才能做到这一点?到目前为止,我已经尝试过了: 但这导致结果集空白。 任何帮助将不胜感激。谢谢你的时间! 问题答案: 有很多方法可以

  • 请帮助解决此错误... 因为我在该对象上使用了bigdecimal类型,而没有添加一个操作@字段(type=FieldType.Double) 有没有办法配置默认的FieldType。大十进制加倍?或者我们需要在每个大十进制中添加字段注释