2015-05-10 14 views
2

我正在嘗試獲取elasticsearch的一竅不通。通過definitive guide閱讀。爲什麼elasticsearch中的文檔不可變?

他們已經提到,每次更新文檔中的某些內容時,更新API都會執行檢索更改重新索引循環 。我完全明白這是因爲他們說「文檔是不可變的」(請參閱​​this)。我在這裏質疑的是爲什麼它首先是不變的。如果僅僅允許某個特定領域的更新和索引,那麼這不是一個限制嗎?

回答

6

首先,最好告訴段是不可變的,而不是告訴文件是不可變的。瞭解原因。你需要了解lucene的工作原理。 Lucerne是一個java庫,在其上構建了elasticsearch。引擎蓋下的單個分片是一個lucene實例,它完成了文檔存儲和搜索的實際工作。 Elasticsearch更多的是位於lucene之上的基於分佈式REST的服務器層。

在lucene中爲了實現高索引速度我們有段結構。一堆文件保存在一個段中,其中每個段都是磁盤中的單個文件。由於寫入操作之間的文件非常繁重,因此一個段不可變,以便所有後續寫入都轉到新段。

+0

感謝您的答案@Vineeth Mohan。我還不清楚的一件事是段中每個文件包含的內容。通過您的描述,我得到這張圖片: 一堆文件---(構成) - >段---(用代表) - >在磁盤上的文件 PS:我還沒有閱讀Lucene文檔。 – quickbrownfox

+0

單個段包含一組文檔以及與其相關的所有元數據。精確的元數據涉及反向索引和其他相關的數據結構。類似地,對於單個分片,可以有N個分段,每個分段處理自己的一組文檔。 –

+0

所以你說,因爲文件可能跨越多個部分,因此寫差異更新變得如此之重以至於成本大約等於寫新文件並因此不變? – quickbrownfox

相關問題