有一个存储数组的字段。我想根据该字段的数组长度对文档进行排序。样本文件
document 1 = { "countryCodes" : ["US","UK","UA","IN"] } document 2 ={ "countryCodes" : ["FR","SU","UG","UK","US"] }
因此,在排序时,结果应该首先显示文档2,然后显示文档1。
rnmwe5a21#
这里有两个选择。1.使用标记计数类型作为Map中的多字段-这样,另一个字段将被存储为具有数组长度的多字段。你可以了解更多关于here。1.脚本-使用脚本也可以实现相同的功能。{“sort”:{“_script”:{“script”:“doc['countryCodes'].values.size()”} } }
lrl1mhuk2#
对于Elasticsearch 5.6.7,查询应该是这样的:
GET index/_search { "query": { "match_all": {} }, "sort": { "_script": { "type" : "number", "script" : { "lang": "painless", "source": "doc.countryCodes.values.size()" }, "order" : "desc" } } }
disbfnqx3#
最简单的方法是同时索引另一个包含数组长度的字段,然后对该字段进行排序。另一种方法是使用基于脚本的排序,并使用groovy返回数组的长度。
{ "query": { "match_all": {} }, "sort": { "_script": { "script": "doc.countryCodes.values.size()" } } }
还要确保启用动态脚本以使其工作。
iyr7buue4#
对于Elasticsearch 6.8,查询应该是这样的:
{ "query": { "match_all": {} }, "sort": { "_script": { "type": "number", "script": "doc.countryCodes.size()", "order": "desc" } } }
i1icjdpr5#
对于Elasticsearch 7.6,唯一对我有用的是Kamel Mili's answer和Vineeth Mohan's answer的组合:
POST /test/_search { "sort": { "_script": { "type": "number", "script": "doc['countryCodes'].size()", "order": "desc" } }, "query": { "match_all": {} } }
如果countryCodes是常规文本字段,则需要
countryCodes
"script": "doc['countryCodes.keyword'].size()",
而是
5条答案
按热度按时间rnmwe5a21#
这里有两个选择。
1.使用标记计数类型作为Map中的多字段-这样,另一个字段将被存储为具有数组长度的多字段。你可以了解更多关于here。
1.脚本-使用脚本也可以实现相同的功能。
{“sort”:{“_script”:{“script”:“doc['countryCodes'].values.size()”} } }
lrl1mhuk2#
对于Elasticsearch 5.6.7,查询应该是这样的:
disbfnqx3#
最简单的方法是同时索引另一个包含数组长度的字段,然后对该字段进行排序。
另一种方法是使用基于脚本的排序,并使用groovy返回数组的长度。
还要确保启用动态脚本以使其工作。
iyr7buue4#
对于Elasticsearch 6.8,查询应该是这样的:
i1icjdpr5#
对于Elasticsearch 7.6,唯一对我有用的是Kamel Mili's answer和Vineeth Mohan's answer的组合:
如果
countryCodes
是常规文本字段,则需要而是