【问题标题】:Storing data in ElasticSearch在 ElasticSearch 中存储数据
【发布时间】:2019-11-26 23:37:01
【问题描述】:

我正在研究在 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 和 TB 之间的区别。

我的问题是,Elastic Search 能否像搜索扁平数据一样快速搜索嵌套数据?

【问题讨论】:

  • 嵌套需要更多时间进行更新和索引。查询性能将“相似”(但要小心,这取决于用例,例如,如果您使用脚本在数组上循环,嵌套会更快)。

标签: elasticsearch


【解决方案1】:

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

内部对象字段的数组并不像您期望的那样工作。 Lucene 没有内部对象的概念,因此 Elasticsearch 将对象层次结构扁平化为一个简单的字段名称和值列表。

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

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

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

希望有帮助!

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2021-04-18
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多