【问题标题】:how should I think about search engine indices?我应该如何看待搜索引擎索引?
【发布时间】:2011-10-10 01:32:09
【问题描述】:
我正在使用弹性搜索,但不明白索引是什么。例如,如果我有 3 个模型(背包、鞋子和手套),我是把每个模型放在自己的索引中,还是对每个模型的属性进行索引:即我索引鞋子的鞋带、鞋底等?
我试图了解跨索引搜索是否很慢。例如,如果我为模型的每个属性建立索引并且我说 20 个索引,当我运行需要查看所有索引中的数据的搜索时,这是否比使用单个索引并查看存储的 20 个属性慢在那个索引中?
【问题讨论】:
标签:
search
indexing
information-retrieval
elasticsearch
【解决方案1】:
在 Elasticsearch 中,索引由一个或多个主分片组成,其中一个分片是一个 Lucene 实例。每个主分片可以有零个或多个副本,它们的存在为您提供了高可用性和更高的搜索性能。
单个分片可以保存大量数据。但是,使用多个分片可以更轻松地在多个处理器和多个服务器之间分配工作负载。
也就是说,你需要一个平衡点。正确的分片数量取决于您的数据和上下文。分片不是免费的,因此如果您运行 100 个节点的集群,拥有数千个分片很有用,但您不希望在单个节点上这样做。
在 Elasticsearch 中,除了索引之外,您还有类型的概念。将索引视为数据库,将类型视为表。
使用不同的类型没有开销,并且比使用单独的索引更适合您的示例。
您仍然可以搜索所有类型(或选定的类型列表)和所有索引(或选定的列表)或任何组合。
每种类型都可以有自己的字段(如表中的列)。
所以在您的示例中,我将有一个包含 3 种类型的索引,每种类型都有自己的字段。从默认的主分片数 (5) 和默认的副本数 (1) 开始,只有在您更好地了解数据时才能更改它们。
注意:不要将 Elasticsearch 中的索引与数据库中的索引混淆