2010-06-18 123 views
7

實現Lucene實時索引的最佳方式是什麼?Lucene實時索引?

+1

實時索引什麼?你能否多解釋一下你正在尋找的東西? – 2010-06-18 06:24:44

+0

我已經花了2年的時間研究這個問題,並且在solr中,我不得不說:在實時索引方面,solr並不是恰當的平臺。提交對於大型索引非常重要 - 我聽說過每小時只能管理1次提交的大型安裝。話雖如此,最近的一個名爲Lucandra的項目可能證明是有希望的 - 我現在找不到任何文檔,但我想我聽到了一些關於不需要提交的內容。 http://github.com/tjake/Lucandra#readme – 2010-06-18 06:28:24

+1

你必須解釋更多 - 「實時」沒有具體含義:至少你需要指定什麼是可接受的延遲。例如,軟實時(比如,需要5-10秒才能顯示更新)對於非巨大的索引來說並不難。 – StaxMan 2010-07-23 23:59:02

回答

4

從索引編寫器獲取索引讀取器。

更新:看起來像當前的方法是open a directory reader using an index writer對象。

+0

這將如何幫助實時索引? – Mikos 2010-06-18 22:25:47

+3

通過允許搜索在提交點之前查找文檔。從作者處獲得的讀者隨着文檔的添加而不斷更新。 – 2010-06-19 07:42:56

+1

雖然試圖做IndexReader reader = indexWriter.getReader(); 來自類型IndexWriter的方法getReader()不可見。 http://lucene.apache.org/core/4_7_2/core/org/apache/lucene/index/IndexWriter.html?is-external=true – 2014-05-26 11:18:57

2
+0

Zoie有承諾,但是我發現文檔和代碼示例嚴重缺乏。此外,如果索引的文檔被批量處理,索引編制速度很快,但是一次索引幾個文檔實際上非常緩慢。我個人發現原始Lucene是一個更簡單的API使用。 – 2011-06-25 13:10:29

1

SolrCloud看起來很有希望。它仍然是非常新的,但將以NoSQL的精神提供分佈式Solr索引。

8

Lucene有一個稱爲近實時搜索的功能來滿足這種需求。

它要求您的IndexReader與IndexWriter位於同一個JVM中。

您可以使用IndexWriter進行更改,然後使用IndexReader.open(writer)直接從作者或舊版Lucene發佈writer.getReader()中打開reader。這個調用通常會非常快速(與您上次打開閱讀器後所做的更改數量成正比),因爲它繞過了通常打開閱讀器所需的昂貴代碼。它能夠搜索作者中未提交的更改。

該閱讀器仍在搜索作者的時間點快照,即從打開時的所有更改。