弹性搜索中如何根据文本字段的长度修改相关性评分



我有一个索引字段,例如称为"text",现在我想通过使用"function_score"查询来替换相关性评分。

这是我的查询:

{
   "index":"search-read",
   "type":"all",
   "body":{
      "from":0,
      "size":30,
      "explain":true,
      "query":{
         "function_score":{
            "query":{
               "query_string":{
                  "query":"assetType:ARTICLE AND miete"
               }
            },
            "script_score":{
               "script":"doc['text'].value.length()"
            },
            "boost_mode":"replace"
         }
      }
   }
}

我不明白的问题是

doc['text'].value.length()

不检索字符串的长度,但为什么?一个有2455个字符的字符串存储在这个字段中,但我得到14。

doc['text'].value

应该返回字段'text'作为Java字符串对象,然后length()的长度。一些想法为什么我的配置是错误的或其他方式来实现这一点?我的目标是文本越短,相关性得分越低;我知道这是相反的,elasticsearch如何处理这个

不能在value上调用方法。您正在访问的是文档字段,这些字段仅限于ES提供给您的内容。你可以在这里看到可用的内容:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html

然而,

你总是可以写一个hack。当索引你的文本值时,添加另一个属性(例如text_length)并根据你的文本输入填充它。这是一种技巧,但它将帮助您实现您的目标,只要您能够权衡

相关内容

  • 没有找到相关文章

最新更新