4

我正在使用弹性搜索,但不明白索引是什么。例如,如果我有 3 个模型(背包、鞋子和手套),我是否将每个模型放在自己的索引中,或者我是否对每个模型的属性进行索引:即我索引鞋子的鞋带、鞋底等?

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

4

1 回答 1

7

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

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

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

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

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

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

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

因此,在您的示例中,我将有一个包含 3 种类型的索引,每种类型都有自己的字段。从默认的主分片数 (5) 和默认的副本数 (1) 开始,仅在您更好地了解数据时更改它们。

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

于 2011-07-21T23:14:10.923 回答