使用Elasticsearch中的doc值从因子对象获取特定键

时间:2014-12-31 00:20:30

标签: sorting groovy scripting elasticsearch

我正在使用基本的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; }]"

1 个答案:

答案 0 :(得分:2)

Elasticsearch的默认语言是groovy,这不是访问地图的格式。 以下内容适用于您

{
  "sort": {
    "_script": {
      "script": "factor.get(doc['quality'].value)",
      "type": "number",
      "params": {
        "factor": {
          "high": 2,
          "med": 1,
          "low": 0
        }
      },
      "order": "asc"
    }
  }
}

有关该主题以及如何在elasticsearch脚本(2)中使用groovy(1)的更多参考,您可以参考这些参考12