有一个包含数组的字段,我想根据该字段的数组长度对文档进行排序。
示例文档:
document 1 = {
"countryCodes" : ["US","UK","UA","IN"]
}
document 2 ={
"countryCodes" : ["FR","SU","UG","UK","US"]
}
因此,在排序上,结果应该首先显示文档2,然后再显示文档1。
有一个包含数组的字段,我想根据该字段的数组长度对文档进行排序。
示例文档:
document 1 = {
"countryCodes" : ["US","UK","UA","IN"]
}
document 2 ={
"countryCodes" : ["FR","SU","UG","UK","US"]
}
对于Elasticsearch 5.6.7,查询应如下所示:
GET index/_search
{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"type" : "number",
"script" : {
"lang": "painless",
"source": "doc.countryCodes.values.size()"
},
"order" : "desc"
}
}
}
{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"type": "number",
"script": "doc.countryCodes.size()",
"order": "desc"
}
}
}
POST /test/_search
{
"sort": {
"_script": {
"type": "number",
"script": "doc['countryCodes'].size()",
"order": "desc"
}
},
"query": {
"match_all": {}
}
}
countryCodes
是一个普通的文本字段,您将需要 "script": "doc['countryCodes.keyword'].size()",
相反。