2013-07-18 127 views
1

db中有大約1000萬條記錄,我們很高興做到這一點,因爲我們通過從solr而不是db獲取記錄來獲得高性能優勢。 此數據用於報告。Solr更新索引

目前我們在索引中保持平面數據。例如:

Itemid, Companyname, Username, Status 

只要項目的狀態從「接收」更改爲「出售」,我們就調用solr api更新記錄。所有工作都很好。我們已實時更新索引,報告效果良好。

問題1:現在將來可以說,用戶更新公司A到公司B的公司名稱,或者可能是用戶名從Mike到Jimmy,我們該如何處理?

我的想法

  1. 聽用戶和公司更新事件,並更新只有那些Solr的指標,其中name =舊名稱

  2. 保持ID爲公司和用戶索引而不是名字。從solr獲取記錄後,再次點擊db以獲取更新的名稱。這將是一個混合的方法,其中主要字段來自指數也只有這樣的字段來自數據庫表

問題2:我打電話Solr的更新來更新每一個呼叫狀態transistions指標。現在有更好的方法來做到這一點嗎?我未來在性能打擊方面漏掉了什麼,或者當狀態轉換的頻率增加了嗎?

問題3:可以說,未來需要在報表中再顯示一個尚未索引的列。什麼是這樣做的標準可接受的方式?

請分享您的專家意見。

回答

0

問題1:現在,在未來可以說,A公司更新了公司名稱 B公司用戶,也可能從用戶名邁克吉米,如何 是我們假設來處理呢?

我們有一個平等的案例,我們所做的是使用solr數據導入處理程序。在數據庫方面,我們添加了一個LAST_MODIFIED列。在每行更新時,數據庫自動將LAST_MODIFIED`時間戳更改爲「now」。

在Solr的方面,我們通過調用Data Import Request Handler,這樣的運行數據導入作業:

http://solrhost:8888/solr/mycore/dataimport?command=full-import&clean=false&optimize=false 

在這種情況下,數據導入請求處理器上運行的數據庫查詢與LAST_MODIFIED的where子句。看看this

對於這一點,重要的是,你已經在Solr中定義的唯一的ID,如您Itemid

問題2:我打電話Solr的更新來更新索引狀態 transistions每次調用。現在有更好的方法來做到這一點嗎? Am 我錯過了未來的任何性能打擊或 頻率的狀態轉換增加?

查看問題1.這是一種替代方法,但不確定,如果速度更快。

問題3:可以說,將來需要在報表中顯示一個還未索引的 列。什麼是標準的 可接受的方式來做到這一點?

對我來說,它是:添加新的字段solr,重新啓動solr。我可能會重新索引所有文件。重新編排是必要的,如果還有退出的文檔可以獲得更多信息。