在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可以像平铺数据一样快地搜索嵌套数据吗?

尼古拉·瓦西里耶夫(Nikolay Vasiliev)

默认情况下,Elasticsearch将展平对象数组,就像您在示例中演示的那样:

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

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

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

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

希望有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章