【问题标题】:Elastic Search sort by field defined in another fieldElastic Search 按在另一个字段中定义的字段排序
【发布时间】:2019-01-16 01:58:30
【问题描述】:

我有两个字段:count(对象)和countyby(文本)。 count 对象有几个 number 类型的嵌套属性:

"count" : {
    "properties" : 
     "value1" : {
         "type" : "long"
     },
     "value2" : {
         "type" : "long"
     },
     "value3" : {
         "type" : "long"
     },
     "value4" : {
         "type" : "long"
     },
     "value5" : {
         "type" : "long"
     }
 },
 "countBy": {
     type: "keyword"
 }

我需要进行搜索,根据 countBy 属性中指定的 count 嵌套属性的值对文档进行排序

【问题讨论】:

  • 所以countBy包含value1、value2等值?

标签: elasticsearch elasticsearch-5


【解决方案1】:

您可以通过script-based sorting 实现此目的:

"sort" : {
    "_script" : {
        "type" : "number",
        "script" : {
            "lang": "painless",
            "source": "doc['countBy'].value != null ? doc['count.'+doc['countBy'].value].value : 0"
        },
        "order" : "desc"
    }
}

【讨论】:

  • 谢谢。我收到“[脚本] 中 VALUE_STRING 的未知键”。 ES 脚本似乎有点难以调试。错误消息不是特别有用
  • 你运行的是哪个版本的 ES?
  • 6.5.1。我删除了调试语句并得到了这个:No field found for [count.null] in mapping with types []
  • 好的,这意味着您的某些文档对countBy 没有价值。我已经修复了脚本,请重试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多