我有一个索引字段,例如称为"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)并根据你的文本输入填充它。这是一种技巧,但它将帮助您实现您的目标,只要您能够权衡