如何在弹性搜索中修改文本字段长度的相关性分数?

时间:2014-08-26 08:22:54

标签: java elasticsearch scoring relevance

我有一个索引字段,例如叫"文字"现在我想通过使用" 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()的长度。 一些想法为什么我的配置错误或另一种方式来实现这个?我的目标是通过文本越短来降低相关性得分;我知道弹性搜索处理这个问题的方式正好相反。

1 个答案:

答案 0 :(得分:1)

无法在价值上调用方法。您正在访问的是文档字段,仅限于ES提供给您的任何内容。你可以看到这里有什么:

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

但是,你总是可以写一个黑客。索引文本值时,添加另一个属性(例如text_length)并根据文本输入填充它。这是一个黑客攻击,但只要你能做出权衡,它就会帮助你实现目标