我有一个索引字段,例如叫"文字"现在我想通过使用" 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()的长度。 一些想法为什么我的配置错误或另一种方式来实现这个?我的目标是通过文本越短来降低相关性得分;我知道弹性搜索处理这个问题的方式正好相反。
答案 0 :(得分:1)
无法在价值上调用方法。您正在访问的是文档字段,仅限于ES提供给您的任何内容。你可以看到这里有什么:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html
但是,你总是可以写一个黑客。索引文本值时,添加另一个属性(例如text_length)并根据文本输入填充它。这是一个黑客攻击,但只要你能做出权衡,它就会帮助你实现目标