首页 > 解决方案 > ElasticSearch,如果在其他对象中写入对象,性能会下降吗?

问题描述

我有一个对象列表,例如

{
"type1_a":".... value ....",
"type1_b":".... value ....",
"type1_c":".... value ....",
"type1_d":".... value ....",
"type1_.....":".... value ....",
"type2_a":".... value ....",
"type3_b":".... value ....",
"type4_c":".... value ....",
"type5_d":".... value ....",
"type6_.....":".... value ...."
}

但我正在考虑将对象作为

{
    "type1": { 
          "a": ".... value ...."
          "b": ".... value ...."
          "etc..": ".... value ...."
    },
    "type2": { 
          "a": ".... value ...."
          "b": ".... value ...."
          "etc..": ".... value ...."
    }
}

我有大约 100 个这些属性,还有几 TB 的数据(相当大的索引)。

我想知道弹性搜索引擎在理论上是否以较低效率的方式处理嵌套的内容与第一级的内容相比。

标签: elasticsearch

解决方案


是的,Elasticsearch 中的嵌套数据类型绝对是非常昂贵的,而且您确实有一个非常大的索引。请阅读Go-Jek 工程中关于嵌套文档的问题以及他们如何优化它的非常有趣的博客。

简而言之,如果性能对您来说是一个关键方面,并且如果您可以避免嵌套数据类型,那么请在您的环境/设置中对其进行基准测试,而不仅仅是做出一些最终决定。


推荐阅读