存在存储数组的字段。我想根据该字段的数组长度对文档进行排序。
示例文件
document 1 = {
"countryCodes" : ["US","UK","UA","IN"]
}
document 2 ={
"countryCodes" : ["FR","SU","UG","UK","US"]
}
因此,在排序时,结果应首先显示文档2,然后显示文档1.
答案 0 :(得分:3)
这里有两种选择。
脚本 - 使用脚本也可以实现相同目的。
{ "排序":{ " _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"
}
}
}