Elasticsearch:嵌套VS扁平索引

时间:2019-10-11 12:36:07

标签: elasticsearch

Elasticsearch中嵌套索引的优缺点是什么?

我正在考虑某些用户或设备的时态数据,因此,用平面表示所有数据都存储在索引的根目录中,并且嵌套表示数据按设备/ id分组。因此,每个用户/设备ID包含一个文档,每个输入时间包含一个文档。

我认为是优点:

  • 嵌套索引提供了更多的查询可能性

还有缺点:

  • 写入费用更高
  • 索引管理确实会更加困难(如何使数据过期?不容易进行索引滚动,如何轻松地将数据分散到不同的索引中?)

1 个答案:

答案 0 :(得分:1)

关于ES嵌套类型的优缺点,完全同意您的看法。只想详细说明索引成本。 紧记嵌套字段也会打开查询功能

如果您使用嵌套类型和不频繁修改,那么它很棒,并且创建了更大的查询范围,但是如果您进行频繁修改,则将花费巨大的成本。

nested类型映射在索引方面比平面类型映射更具影响力。由于 Lucene没有嵌套对象类型的任何概念,因此所有内容都存储为平面对象。因此,在索引编制时还要执行其他操作。

想象一下,您有一个很大的嵌套文档,可以转换为10万个内部文档,并将其与平面数据模型进行比较,在该模型中我们已将10万个零件索引为独立文档。如果我们在最深的嵌套级别添加单个嵌套文档,则这将添加单个平面文档,而嵌套文档最终将为100k + 1个文档重新索引。另一方面,如果您从根本上更改了某些内容,则在两种情况下都需要更新所有文档。因此,您可以想象对单个文档进行更改会花费您重新索引该文档的所有嵌套字段的费用。