2017-08-06 53 views
0

我正在瀏覽彈性搜索的在線權威指南。「倒排索引在彈性搜索中是不可變的」究竟意味着什麼?

我在下面的鏈接中描述的倒排索引的不變性一個問題:當一個新的文檔中的索引被添加 https://www.elastic.co/guide/en/elasticsearch/guide/current/making-text-searchable.html

會發生什麼?是否會重新創建倒排索引以包含與新文檔相關的詳細信息/元數據?

它會不會影響彈性的表現?

+0

我有點與我提到的鏈接中的文檔混淆。我認爲,這是表示倒排索引的「分段」。當創建新文檔時,會在內存緩衝區中創建一個新的分段。一旦該段被提交併寫入磁盤,它就可以用於屬於該段的文檔的倒排索引。 – pfulara

+0

是的,這非常接近。細分不必寫入磁盤以便搜索,但否則您是正確的。 – xeraa

回答

1

你的問題是實現這一文章的結尾說:

當然,一個不變的指標有其不足之處太多,主要的事實,這是不變的!你不能改變它。 如果您想要使新文檔可搜索,則必須重建整個索引。這會對索引可以包含的數據量或索引可以更新的頻率產生重大限制。

這意味着你的舊索引將需要銷燬並重新創建以包括新的文件。通過對數據進行羣集並在冷羣集上執行新索引創建,然後將其切換爲熱點,然後在現在冷羣集上重建索引,可以緩解性能影響。

+0

似乎,對於實時場景或時間序列數據,非常頻繁地添加彈性文件的新文檔,反向索引會非常頻繁地重新創建?彈性在實時情況下表現更好嗎? – pfulara

+0

我認爲,細分的概念是我查詢的答案。以下是鏈接:https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-indices。html – pfulara

+0

所以基本上動態更新的索引是倒排不變的索引段。去這條路線是好的,直到你有太多的段,然後我會推薦我上面提到的熱插拔方法,並刪除所有的指標,並作出一個逆不變的指數。根據您的新文件率,這可能是每月,半月或每年。 – user8421818

1

當你添加新文檔的索引,都在1秒鐘內書面文件(默認值 - 你可以增加它,但你真的不應該將其設置爲0)被寫入(Lucene的)段。該段將首先存儲在內存中,稍後將刷新到磁盤。

如果您更新文檔,原始版本將被標記爲刪除,新的文件將創建(與其他文件一起進行批處理秒鐘之內變成一個段)。

每一個環節,只要它是在內存中有自己的倒排索引(ES),並且它是搜索。

最終,Elasticsearch會做一個合併和多段組合成一個。在此步驟中,刪除和替換(舊版本的更新)文檔也將被刪除。您不必一般性地調用強制合併 - Elasticsearch非常善於確定何時應該自行完成。

這提供了一個非常好的性能平衡。如果您不需要立即查找文檔,則常見的性能調整是將刷新間隔設置爲30秒或類似的值。

PS:改變現有的數據會要求你重新索引你的文件 - 有一個API爲。重新編排數據很常見,特別是對於搜索用例。

相關問題