我正在使用基本的 Elasticsearch 排序脚本按质量对文档进行排序。由于我们将质量存储为“低”、“中”和“高”,因此无法进行基本排序,因为它们的字母顺序与其感知的枚举顺序不同。
这是我正在使用的脚本:
"sort":{
"_script":{
"script":"factor[doc['quality'].value]",
"type":"number",
"params":{
"factor": {
"high": 2,
"med": 1,
"low": 0
}
},
"order":"asc"
}
如果我将 doc['quality'].value
替换为 'high'
它工作得很好,所以接受 doc 值作为键似乎存在问题对于对象。
任何有关其原因的见解将不胜感激。
我得到的错误如下:
ScriptSortParser$2@1135e7f9>]: Query Failed [Failed to execute main query]]; nested: NullPointerException; }]"
最佳答案
Elasticsearch 的默认语言是 groovy,这不是访问 map 的格式。 以下内容应该适合您
{
"sort": {
"_script": {
"script": "factor.get(doc['quality'].value)",
"type": "number",
"params": {
"factor": {
"high": 2,
"med": 1,
"low": 0
}
},
"order": "asc"
}
}
}
有关该主题以及如何在 elasticsearch 脚本编写(2) 中使用 groovy(1) 的更多引用,您可以引用这些引用文献 1 , 2
关于sorting - 在 Elasticsearch 中使用文档值从因子对象获取特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714515/