我该如何思考搜索引擎索引?

4
我正在使用Elasticsearch,但不太了解索引的具体含义。例如,如果我有3个模型(背包、鞋子和手套),我应该将每个模型放在自己的索引中,还是仅索引每个模型的属性:例如,我只索引鞋子的鞋带、鞋底等?
我想了解跨索引搜索是否会变慢。例如,如果我为每个模型的属性建立索引,而我有20个索引,当我运行一个需要查看所有索引数据的搜索时,这是否比只在单个索引中查看存储在其中的20个属性要慢?
1个回答

7
在Elasticsearch中,一个索引由一个或多个主分片组成,其中每个主分片都是一个Lucene实例。每个主分片可以有零个或多个副本,其存在使您具有高可用性和增加的搜索性能。
单个分片可以容纳大量数据。但是,使用多个分片可以更轻松地在多个处理器和多个服务器之间分配工作负载。
话虽如此,您需要平衡考虑。正确的分片数取决于您的数据和上下文。分片不是免费的,因此,如果您正在运行100个节点集群,则拥有数千个分片很有用,但在单个节点上则不要这样做。
在Elasticsearch中,除了具有索引外,还有类型的概念。将索引视为数据库,将类型视为表格。
使用不同的类型没有额外开销,并且与您的示例相比,更适合使用单独的索引。
您仍然可以跨所有类型(或选定的类型列表)和跨所有索引(或选定列表)或任何组合进行搜索。
每种类型都可以有自己的字段(就像表格中的列)。
因此,在您的示例中,我会有一个包含3种类型的索引,每种类型都有自己的字段。从默认数量的主分片(5)和默认数量的副本(1)开始,并仅在更好地了解您的数据时才更改这些内容。
注意:不要将Elasticsearch中的索引与数据库中的索引混淆。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接