Elasticsearch是否保留多值字段的顺序?
即。如果我将以下值放入字段:
{
"values": [
{"original": "1", "new": "one"},
{"original":"2", "new":"two"},
{"original":"3","new":"three"}
]
}
(鉴于未分析字段)
我可以确定列表的内容将始终按照我放在那里的顺序返回吗?
在上面的示例中,我想确保“值”中第一个位置的“一个”始终对应于“values_original”等中的“1”。
我也可以将它保存为嵌套对象,即
{{1}}
但我想避免开销。
如果保证多值字段中的值的顺序得以保留,那么我保留两个并行多值字段的方法将起作用。
答案 0 :(得分:3)
我找到了答案。
是的,我可以依靠Elasticsearch在文档中的多值字段中保持值的顺序。 (但是,当我执行搜索时,Elasticsearch没有关于某个术语在什么位置的信息。)
根据文件:
当您从Elasticsearch获取文档时,任何数组的顺序与索引文档时的顺序相同。 _source字段 你得到的包含与你完全相同的JSON文档 索引。
但是,数组是可索引的可搜索的 - 作为无数字的多值字段。在搜索时,您不能参考“第一个 元素“或”最后一个元素。“而是将数组视为一个包 值。
答案 1 :(得分:2)
Elasticsearch - The Definitive Guide说以下内容:
当您从Elasticsearch获取文档时,任何数组的顺序与索引文档时的顺序相同。您获取的_source字段包含与您编制索引的完全相同的JSON文档。
但是,数组是可索引的可搜索的 - 作为无数字段的多值字段。在搜索时,您不能引用“第一个元素”或“最后一个元素”。相反,将数组视为一组值。
因此,对于存储的字段,似乎保留了顺序,对于索引字段,它不是。