2011-05-29 38 views
14

我goting改變一些字段類型的模式,所以看起來它必須重新索引目前Solr的索引數據的所有文檔與這種變化。如何重新編制所有文檔Solr中的數據

問題是關於如何「重新索引」所有文檔? 我能想到的一個解決方案是通過搜索界面「查詢」所有文檔,並以XML或JSON轉儲大文件,然後將其轉換爲Solr的輸入XML格式,然後再次將其重新加載到Solr以製作模式改變發生。

有沒有更好的方法可以更有效地做到這一點?感謝您的建議。

回答

12

首先,傾倒查詢的結果可能不會,如果你有被索引,而不是存儲領域給你的原始數據。一般情況下,最好將SOLR輸入的副本保存爲一種可輕鬆用於從頭開始重建索引的表單,如果需要的話。在這種情況下,只需通過發佈<delete><query>*:*</query></delete>然後<commit/>然後<optimize/>來運行刪除查詢。之後,您的索引爲空,您可以添加使用新模式的新文檔。

但重新啓動後SOLR與新架構文件你可以只運行<optimize/>脫身。最好備份一個可以測試它的配置。

有一個名爲Luke的工具,可以用來瀏覽和導出Lucene索引。我從來沒有嘗試過,但它可以幫助您導出數據,以便重新導入數據。

+0

感謝邁克爾。看起來最好有完整的源數據備份來完成重新索引 – Yinan 2011-06-03 08:45:48

2

傾銷查詢的所有結果可以給你不完整的或無效的數據,因爲你的索引中,您可能沒有表面所有的數據的想法。

同時保持你的索引的副本的形式,可以在其中重新插入它會在一個情況下工作良好,其中的數據並沒有改變的想法,當你添加了新的變得更加複雜字段添加到模式。在這種情況下,您需要從源收集所有數據,格式化數據以匹配新架構,然後插入它。

2

如果Solr中的文檔數量很大,並且需要保持Solr服務器可用於查詢,則可以開始索引作業,以在後臺重新添加/重新索引文檔。

引入一個新字段以保留每個文檔的最後索引時間戳是有幫助的,因此在任何索引/重新索引問題的情況下,將有可能識別等待重新索引文檔。

爲了提高查詢的等待時間,可以使用配置參數來在每次提交後保留緩存。

0

有一個PHP script所做的正是這樣的:獲取並重新插入所有的Solr文檔,重新索引它們。

用於優化,從命令行調用:

curl http://<solr_host>:<port>/solr/<core_name>/update -F stream.body=' <optimize />' 
相關問題