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

时间:2016-01-12 22:59:28

标签: elasticsearch lucene search-engine

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

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

{
    "values": [
        {"original": "1", "new": "one"}, 
        {"original":"2", "new":"two"},
        {"original":"3","new":"three"}
    ]
}

(鉴于未分析字段)

我可以确定列表的内容将始终按照我放在那里的顺序返回吗?

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

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

{{1}}

但我想避免开销。

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

2 个答案:

答案 0 :(得分:3)

我找到了答案。

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

根据文件:

  

当您从Elasticsearch获取文档时,任何数组的顺序与索引文档时的顺序相同。 _source字段   你得到的包含与你完全相同的JSON文档   索引。

     

但是,数组是可索引的可搜索的 - 作为无数字的多值字段。在搜索时,您不能参考“第一个   元素“或”最后一个元素。“而是将数组视为一个包   值。

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

答案 1 :(得分:2)

Elasticsearch - The Definitive Guide说以下内容:

  

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

     

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

因此,对于存储的字段,似乎保留了顺序,对于索引字段,它不是。