sorting - 在 Elasticsearch 中使用文档值从因子对象获取特定键

标签 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; }]"

最佳答案

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/

相关文章:

r - 根据月-年时间格式对数据框进行排序

java - 斯波克和梅文。使用@Unroll 的测试因错误而失败,但 Maven 输出中的占位符未填充迭代数据

groovy - 获取已解析的groovy脚本方法

scripting - spawn和exec有什么区别?

python - 沉默 "No handlers could be found for logger "paramiko.transport""消息

java - JRuby 和 Java 对象

php - SQL Order By - 最后显示某些记录

vba - 对范围进行排序而不在电子表格中对其进行排序

c++ - 如何总结字符串中出现的字符的值,使它们成对并按升序排序?

grails - 如何在UrlMappings.groovy中的Url模式中转义#号?