基于elasticsearch中数组的长度排序

时间:2015-11-27 12:46:30

标签: sorting elasticsearch

存在存储数组的字段。我想根据该字段的数组长度对文档进行排序。

示例文件

document 1 = {
"countryCodes" : ["US","UK","UA","IN"]
}

document 2 ={
"countryCodes" : ["FR","SU","UG","UK","US"]
}

因此,在排序时,结果应首先显示文档2,然后显示文档1.

3 个答案:

答案 0 :(得分:3)

这里有两种选择。

  1. 在映射中使用令牌计数类型作为多字段 - 这样,另一个字段将存储为具有数组长度的mutlti字段。您可以详细了解here
  2. 脚本 - 使用脚本也可以实现相同目的。

    {       "排序":{         " _script":{           "脚本":" doc [' countryCodes']。values.size()"         }       }     }

答案 1 :(得分:2)

最简单的方法是索引另一个包含数组长度的字段,然后对该字段进行排序。

另一种方法是使用script-based sorting并使用groovy返回数组的长度。

{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "script": "doc.countryCodes.values.size()"
    }
  }
}

还要确保enable dynamic scripting才能生效。

答案 2 :(得分:1)

对于Elasticsearch 5.6.7,查询应如下所示:

GET index/_search
{
    "query": {
        "match_all": {}
    },
    "sort": {
        "_script": {
            "type" : "number",
            "script" : {
                "lang": "painless",
                "source": "doc.countryCodes.values.size()"
            },
            "order" : "desc"
        }
    }
}