我想知道elasticsearch如何快速搜索。它是否使用倒排索引,它是如何在內存中表示的?它如何存儲在磁盤上?它如何從磁盤加載到內存?它如何快速地合併索引(我的意思是在搜索時如何將兩個列表如此快速地結合起來)?彈性搜索如何保持索引
3
A
回答
1
elasticsearch使用lucene存儲逆文檔索引。 Lucene將依次存儲稱爲具有反向索引數據段的只讀文件。每段都包含一些文檔。這些段是隻讀的,永遠不會改變。要刪除或更新文檔,elasticsearch將維護一個刪除/更新列表,該列表將用於覆蓋只讀段的結果。
通過這種方法,某些細分可能會完全廢棄或僅包含少量最新數據。這些細分市場將被重寫或刪除。
有一個有趣的elasticsearch插件,可視化段和重寫的過程: https://github.com/polyfractal/elasticsearch-segmentspy
要看到它在行動開始索引大量的數據,看到了部分信息。
與段API,您可以檢索有關段的信息: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-segments.html
1
我會分享我所瞭解的ElasticSearch(ES)。是ES採用了倒排索引,這裏是它如何被構建的 - 如果我們對這些文檔的空白分析 -
{
"_id": 1,
"text": "Hello, John"
}
和
{
"_id": 2,
"text": "Bonjour, John"
}
倒排索引
Word | Docs
___________________
Hello | 1
Bonjour | 2
John | 1&2
該索引建立在索引時間,文檔被分配給基於哈希文件的碎片ID
。無論何時發出搜索請求,都會執行查找所有碎片,然後將其結果合併並返回給請求者。由於倒排索引的性能,結果被返回並快速合併。
ES將數據存儲在您啓動ES並創建索引後創建的數據文件夾中。文件結構類似於 - /data/clustername/nodes/...
,如果您查看此目錄,您將瞭解它的組織結構。您可以定義ES'索引數據的存儲方式here。例如,所有索引數據都存儲在磁盤上的內存中。
有很多關於ES網站的信息,還有幾本關於ES的出版書籍,你可以看到這些here。
相關問題
- 1. 彈性搜索索引
- 2. 搜索API彈性搜索索引
- 3. 彈性搜索索引未被分析
- 4. 配置彈性搜索索引
- 5. 創建索引 - 彈性搜索 - Java API
- 6. 複製彈性搜索索引與Logstash
- 7. Python中的彈性搜索索引
- 8. 在彈性搜索索引網站/ url
- 9. 彈性搜索中的獨立索引
- 10. 彈性搜索:Transfrom CSV到索引
- 11. 彈性搜索索引因特網
- 12. 使用彈性搜索索引couchdb
- 13. 彈性搜索索引文件
- 14. anagram的彈性搜索索引?
- 15. 彈性搜索索引功能?
- 16. 彈性搜索自動翻轉索引
- 17. 散列索引與彈性搜索
- 18. 彈性搜索索引模板創建
- 19. 如何保持彈性搜索數據與MySql同步?
- 20. 如何在Cent OS 6.5中保持彈性搜索運行?
- 21. 如何彈性搜索
- 22. 刷新彈性搜索索引/實時搜索
- 23. 重新彈性搜索多表/索引搜索
- 24. 同時在彈性搜索中索引多個索引
- 25. 如何在彈性搜索中創建索引和輸入?
- 26. 如何在彈性搜索中索引數據
- 27. 如何設置「索引」:「not_analyzed」全局彈性搜索
- 28. 如何定期刪除彈性搜索索引?
- 29. 如何在彈性搜索中索引分層數據?
- 30. 如何從文本文件填充彈性搜索索引?
我已經打了倒排索引一點。其中我保留了頁面的ID和單詞的位置:「單詞」:{page_id:0,2,12; next_page_id:10,15}。我將它序列化爲json字符串並保存在db中。在抓取了五十萬頁的索引後,一些常見詞彙達到了大約5Mb,因此從db中取出並將其反序列化回去需要很長時間。然後處理這些試圖在其中找到常見頁面的數據塊也不是很快。所以我猜彈性搜索有不同的事情... – ren