Arrays Elasticsearch中的排序数组类型
我陷入了一个有弹性的陷阱,试图按子属性(数组)的大小对命中进行排序 我应用了以下主体查询:Arrays Elasticsearch中的排序数组类型,arrays,sorting,
elasticsearch,Arrays,Sorting,
elasticsearch,我陷入了一个有弹性的陷阱,试图按子属性(数组)的大小对命中进行排序 我应用了以下主体查询: '{ "query": { "match_all": {} }, "sort": { "_script": { "type": "number", "script": "doc[\"myarray\"].values.size()", "order": "desc" } } }" 但是,由于弹性数组类型不在映射中(支持开箱即用),我
'{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"type": "number",
"script": "doc[\"myarray\"].values.size()",
"order": "desc"
}
}
}"
但是,由于弹性数组类型不在映射中(支持开箱即用),我有一个错误,告诉我我的数组不是映射(正常…)
有什么想法吗
谢谢 如果您想要数组的大小,那么您必须使用弹性搜索提供的动态脚本。 (选择您的版本)。 如果您使用AWS托管ES,请务必阅读此内容
andrei stefan是正确的,映射时可以使用多字段作为类型如果需要数组的大小,则可以使用弹性搜索提供的动态脚本。 (选择您的版本)。 如果您使用AWS托管ES,请务必阅读此内容
andrei stefan是正确的,您可以在映射时使用多字段作为类型最好且推荐的方法是在同一文档中索引一个附加字段,该字段应包括字段大小作为数字,因为这在索引时是已知的。然后就在那个区域排序 您想要完成的看似简单的任务的困难在于,Elasticsearch中的数组被视为一个平面数据结构,所有内容都是“组合”的。如果您在此字段上使用的分析器可能会将字段拆分为术语,您是否计算唯一术语的数量或最初索引的值 例如,假设
myarray
类似于[“abc 123”、“abc”、“123”、“abc abc”]
。您是否计算逗号分隔的值(总共4个值)或唯一项(abc
和123
因此总共只有2个值)
正确且最有效的方法是在文档中为长度本身编制索引:
{“myarray”:[“abc 123”、“abc”、“123”、“abc abc”],“myarray_length”:4}
最好且推荐的方法是在同一文档中索引一个附加字段,该字段应包括字段大小作为数字,因为这在索引时是已知的。然后就在那个区域排序
您想要完成的看似简单的任务的困难在于,Elasticsearch中的数组被视为一个平面数据结构,所有内容都是“组合”的。如果您在此字段上使用的分析器可能会将字段拆分为术语,您是否计算唯一术语的数量或最初索引的值
例如,假设myarray
类似于[“abc 123”、“abc”、“123”、“abc abc”]
。您是否计算逗号分隔的值(总共4个值)或唯一项(abc
和123
因此总共只有2个值)
正确且最有效的方法是在文档中为长度本身编制索引:
{“myarray”:[“abc 123”、“abc”、“123”、“abc abc”],“myarray_length”:4}