我有〜10种不同的文档类型,它们共享10-15个通用字段。但是每种文档类型都有其他字段,其中3个字段最多可以有30-40个其他字段。
我正在考虑为每种文档类型使用不同的映射类型。但是,如果我正确理解了映射的工作方式,ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。
根据本文(索引与类型),ElasticSearch在处理稀疏数据方面不是很好(是吗?),因此对于每种文档类型都有一个单独的索引将是一个论点。但是某些文档类型只包含很少的文档,因此为它们提供单独的索引可能会过大。
我的问题:稀疏文档有多严重?或者,即使某些索引仅包含几个文档,我还是为每种类型使用单独的索引更好吗?
ElasticSearch将在内部使用一个包含150-200个字段的映射。因为没有文档对每个字段都有值,所以我最终会得到很多稀疏数据。
是的,索引中的不同类型共享相同的映射结构。每个类型在每个文档上都只有一个“ _type”字段,当在特定类型上进行搜索时,该字段将自动用于过滤。
稀疏文件有多糟糕?
从索引到类型引用
一种类型的字段还将消耗该字段不存在的类型的文档资源。 这是Lucene索引的一个普遍问题:它们不喜欢稀疏性。
即使某些索引仅包含几个文档,我还是可以为每种类型使用单独的索引更好吗?
您可能已经知道,每个单独的索引都有其自身的开销,并且类型与稀疏文档的结合不太好。
我会建议
请记住,您应该在集群中保留合理数量的分片,这可以通过减少不需要高写入吞吐量和/或存储少量文档的索引的分片数量来实现。