我有~10种不同的文档类型,共享10-15个常用字段。但每种文档类型都有其他字段,其中3个字段最多30-40个字段。
我正在考虑为每种文档类型使用不同的映射类型。但是如果我正确理解映射是如何工作的,ElasticSearch将在内部使用一个映射到150-200个字段。因为没有文档对每个字段都有值,所以我最终会得到大量的稀疏数据。
根据这篇文章(Index vs. Type),ElasticSearch在处理稀疏数据方面不是很好,因此这将是为每种文档类型提供单独索引的参数。但是某些文档类型只有非常少的文档,因此为它们创建单独的索引会有点过分。
我的问题:稀疏文件有多糟糕?或者我最好为每种类型使用单独的索引,即使某些索引只包含一些文档?
答案 0 :(得分:2)
选择Index或Type之间有各种各样的含义。它取决于节点的计算能力,每种类型将存储多少文档等等。
如果你说每个索引只包含很少的文档,那么我建议使用类型,因为每个索引最终都会创建单独的分片 - 这对于一小组文档来说是一种过度杀伤。
您也可以参考此SO Answer。
答案 1 :(得分:2)
ElasticSearch将在内部使用150-200个字段的一个映射。 因为没有文档对每个字段都有值,所以我最终会得到一个 很多稀疏数据。
是的,索引中的不同类型共享相同的映射结构。每种类型的每个文档都有一个“_type”字段,在搜索特定类型时自动用于过滤。
稀疏文件有多糟糕?
一种类型中存在的字段也会消耗此字段不存在的类型的文档的资源。这是Lucene指数的一个普遍问题:他们不喜欢稀疏性。
我最好为每种类型使用单独的索引,即使有些也是如此 索引只包含几个文件?
正如您可能知道的那样,每个单独的索引都有自己的开销,并且类型不会与稀疏文档很好地匹配。
我建议
请记住,您应该在群集中保留合理数量的分片,这可以通过减少不需要高写入吞吐量和/或存储少量文档的索引的分片数来实现。