在ElasticSearch中存储数据

时间:2019-11-25 10:04:49

标签: elasticsearch

我正在研究两种在Elastic Search中存储数据的方式。

[
    {
        'first': 'dave',
        'last': 'jones',
        'age': 43,
        'height': '6ft'
    },
    {
        'first': 'james',
        'last': 'smith',
        'age': 43,
        'height': '6ft'
    },
    {
        'first': 'bill',
        'last': 'baker',
        'age': 43,
        'height': '6ft'
    }
]

[
    {
        'first': ['dave','james','bill'],
        'last': ['jones','smith','baker']
        'age': 43,
        'height': '6ft'
    }
]

(名称为+30个字符的散列。嵌套不会超过上述字符)

我的目标是:

  1. 查询速度
  2. 磁盘空间

我们正在谈论300Gb和1 TB之间的区别。

我的问题是,Elastic Search可以像平铺数据一样快地搜索嵌套数据吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,Elasticsearch将flatten your arrays of objects,如您在示例中演示的那样:

  

内部对象字段的数组无法按您期望的方式工作。 Lucene没有内部对象的概念,因此Elasticsearch将对象层次结构简化为字段名称和值的简单列表。

因此,从查询的角度来看,什么都不会改变。 (但是,如果您需要查询内部数组的各个项目,例如查询dave jones,则可能希望将其显式索引为nested数据类型,这会降低性能。)

谈到磁盘的大小,默认情况下启用压缩。在这里,您应该记住,Elasticsearch将同时以两种方式存储您的原始文档:原始JSON为source,并隐式存储在反向索引中(实际上用于超快速搜索)。

如果您想了解有关调整磁盘使用情况的更多信息,请here's上一个不错的文档页面。例如,您可以为source启用更积极的压缩,或者根本不将source存储在磁盘上(尽管不建议这样做)。

希望有帮助!