首页 > 解决方案 > Elastic Search 按在另一个字段中定义的字段排序

问题描述

我有两个字段: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 属性中指定的计数嵌套属性的值对文档进行排序

标签: elasticsearchelasticsearch-5

解决方案


您可以通过基于脚本的排序来实现这一点:

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

推荐阅读