Elasticsearch 是否保持多值字段的顺序?

Ale*_*rev 3 lucene search-engine elasticsearch

Elasticsearch 是否保持多值字段的顺序?

即,如果我将以下值放入字段中:

{
    "values": ["one", "two", "three"],
    "values_original": ["1", "2", "3"]
}
Run Code Online (Sandbox Code Playgroud)

(鉴于未分析字段)

我能确定列表的内容总是按照我放在那里的顺序返回吗?

在上面的示例中,我想确保“values”中第一个位置的“one”始终对应于“values_original”等中的“1”。

我也可以将它保留为嵌套对象,即

{
    "values": [
        {"original": "1", "new": "one"}, 
        {"original":"2", "new":"two"},
        {"original":"3","new":"three"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

但我想避免开销。

如果保证保留多值字段中的值顺序,那么我保留两个并行多值字段的方法将起作用。

Ale*_*rev 7

我找到了答案。

是的,我可以依靠 Elasticsearch 在文档中的多值字段中保持值的顺序。(但是,当我执行搜索时,Elasticsearch 没有关于某个术语在什么位置的可用信息)。

根据文档:

当您从 Elasticsearch 取回文档时,任何数组的顺序都与索引文档时的顺序相同。您返回的 _source 字段包含您编入索引的完全相同的 JSON 文档。

但是,数组作为无序的多值字段编入索引(使其可搜索)。在搜索时,您不能引用“第一个元素”或“最后一个元素”。相反,将数组视为一袋值。

https://www.elastic.co/guide/en/elasticsearch/guide/current/complex-core-fields.html#_multivalue_fields