一尘不染

稀疏文档有多种索引或多种映射类型?

elasticsearch

我有〜10种不同的文档类型,它们共享10-15个通用字段。但是每种文档类型都有其他字段,其中3个字段最多可以有30-40个其他字段。

我正在考虑为每种文档类型使用不同的映射类型。但是,如果我正确理解了映射的工作方式,ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。

根据本文(索引与类型),ElasticSearch在处理稀疏数据方面不是很好(是吗?),因此对于每种文档类型都有一个单独的索引将是一个论点。但是某些文档类型只包含很少的文档,因此为它们提供单独的索引可能会过大。

我的问题:稀疏文档有多严重?或者,即使某些索引仅包含几个文档,我还是为每种类型使用单独的索引更好吗?


阅读 249

收藏
2020-06-22

共1个答案

一尘不染

ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。

是的,索引中的不同类型共享相同的映射结构。每个类型在每个文档上都只有一个“ _type”字段,当在特定类型上进行搜索时,该字段将自动用于过滤。

稀疏文件有多糟糕?

索引到类型引用

一种类型的字段还将消耗该字段不存在的类型的文档资源。 这是Lucene索引的一个普遍问题:它们不喜欢稀疏性。

即使某些索引仅包含几个文档,我还是可以为每种类型使用单独的索引更好吗?

您可能已经知道,每个单独的索引都有其自身的开销,并且类型与稀疏文档的结合不太好。

我会建议

  • 带有少量文档(具有大量稀疏字段)的文档类型应转到单独的索引,这显然是通过将分片的数量减少到最小数量(即1)来实现的。默认情况下,每个索引有5个分片。如果您的文档数量不是那么大,那么使用5个分片就没有意义,这将减少搜索查询的负担。
  • 具有相同重要字段的文档类型应转到具有不同类型的相同索引。根据文档总数,您可能希望增加分片设置的数量。
  • 如果某些文档类型包含大量文档,则可能要为其创建单独的索引。

请记住,您应该在集群中保留合理数量的分片,这可以通过减少不需要高写入吞吐量和/或存储少量文档的索引的分片数量来实现。

2020-06-22