我该如何看待搜索引擎指数?

时间:2011-07-21 09:07:34

标签: search indexing information-retrieval elasticsearch

我正在使用弹性搜索,并不完全了解索引是什么。例如,如果我有3个模型(背包,鞋子和手套),我是否将每个模型放在自己的索引中,或者我是否对每个模型的属性进行索引:即我为鞋子的鞋带,鞋底等编制索引? / p>

我试图了解搜索索引是否很慢。例如,如果我索引我的模型的每个属性,并且我说,20个索引,当我运行需要查看所有索引中的数据的搜索时,这比具有单个索引并查看存储的20个属性更慢在那个指数?

1 个答案:

答案 0 :(得分:7)

在Elasticsearch中,索引由一个或多个主分片组成,其中分片是Lucene实例。每个主分片都可以有零个或多个副本,它们的存在为您提供高可用性和增强的搜索性能。

单个分片可以容纳大量数据。但是,使用多个分片,可以更轻松地将工作负载分布在多个处理器和多个服务器上。

那就是说,你需要一个平衡点。正确数量的分片取决于您的数据和上下文。碎片不是免费的,因此如果您运行的是100节点群集,那么拥有数千个碎片很有用,但您不希望在单个节点上使用碎片。

在Elasticsearch中,除了索引之外,还有类型的概念。可以将索引视为数据库,类似于表。

使用不同的类型没有开销,并且与您的示例相比,更适合使用单独的索引。

您仍然可以搜索所有类型(或选定的类型列表)以及所有索引(或选定列表)或任何组合。

每种类型都可以有自己的字段(如表中的列)。

所以在你的例子中,我有一个包含3种类型的索引,每种类型都有自己的字段。从默认的主分片数(5)和默认的副本数(1)开始,只有在您更好地理解数据时才更改这些数据。

注意:不要将Elasticsearch中的索引与数据库中的索引混淆