2011-07-21 65 views
4

我正在使用彈性搜索,並不完全理解索引是什麼。例如,如果我有3個模型(揹包,鞋子和手套),我可以將每個模型放在其自己的索引中,還是可以索引每個模型的屬性:即索引鞋帶,鞋底等?我應該如何思考搜索引擎索引?

我想了解它是否很慢搜索索引。例如,如果我對模型的每個屬性進行索引,並且索引了20個索引,那麼當我運行需要查看所有索引中數據的搜索時,這比使用單個索引並查看存儲的20個屬性要慢在那個指數?

回答

7

在Elasticsearch中,索引由一個或多個主碎片組成,其中碎片是Lucene實例。每個主分片可以有零個或多個副本,其存在爲您提供高可用性和增強的搜索性能。

單個分片可以容納大量數據。但是,對於多個分片,將工作負載分佈到多個處理器和多個服務器上更容易。

這就是說,你需要一個平衡。正確的碎片數量取決於您的數據和上下文。碎片並不是免費的,因此,如果您運行的是100個節點的集羣,則有數千個碎片是有用的,但您不希望在單個節點上安裝碎片。

在Elasticsearch中,以及有索引,你有類型的概念。把索引想象成一個數據庫,一個類型就像一個表。

使用不同的類型沒有開銷,並且比您的示例更適合單獨的索引。

您仍然可以搜索所有類型(或選定類型的列表)以及所有索引(或選定列表)或任意組合。

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

所以在你的例子中,我有一個包含3種類型的索引,每種類型都有自己的字段。從默認的主分片數量(5)和默認的副本數量(1)開始,只有當您更好地理解數據時才更改它們。

注意:不要混淆Elasticsearch中的索引與數據庫中的索引