solr增量更新

過時的類
在solr6.4.1版本中,已無HttpSolrServer這個類,但是有SolrClient類,也無SolrServer這個類,取而代之的是EmbeddedSolrServer類,但即使EmbeddedSolrServer類也是繼承自SolrClient類,所以網上所有能查到對這些類進行描述的文章都已過時。
話說就在這一兩天研究solr期間,solr6.4.2版本已在3月6號發佈了~~呃~~
看solr-solrj-6.4.1的源碼,SolrClient從solr5.0版本開始代替SolrServer:
solr6.4.1在線API,可以查看所有的類:
 
solr管理界面增量導入mysql數據庫
在瀏覽器管理界面,首先當然是選擇一個core,我這裏選擇core3
 
選擇core3下的Dataimport菜單
首先當然是校驗db-data-config.xml配置文件是否正確,點擊Reload按鈕(如下圖),當顯示No information available時,表示配置文件無異常,當然這次不要選擇full-import(全量導入),選擇delta-import(增量導入),千萬別選擇Clean,因爲會致使原有導入數據索引全部清空,然後只做更新部分的數據導入,如果此次只更新了一條數據,那麼你的solr此core裏就變成了僅有一條數據!
可以選擇Commit,我現在對於這個選項的理解是:把內存中的索引文件fsync到磁盤,並創建一個index descriptor。這裏比較耗費機器資源。這樣即使jvm崩潰或者宕機,也不影響這部分索引。(參考http://blog.sina.com.cn/s/blog_6277623c0102v40x.html
可以選擇Optimize,
optimize到底幹了什麼? 該如何使用?(參考http://blog.csdn.net/java_zys/article/details/52372635
查資料才發現,optimize其實是個很重量級的操作,執行optimize操作後solr會進行索引數據的合併來優化查詢性能,如果索引數據很大,optimize則會花費很多的時間,如果你在批量提交文檔後每次都進行optimize操作,無疑提交速度會越來越慢,最後甚至導致solr不再響應你的提交請求。另外,如果你的服務是主從模式,那麼對master的optimize還會導致整個索引塊同步到replica上,影響就更加可想而知了。optimize操作可以優化查詢性能,所以還是有用的,可以在服務不忙的時候在solr自帶的控制檯手動執行optimize操作,也可以寫個定時任務來完成。
 
增量導入注意事項
大家可以看到在上圖中,entity標籤裏,query屬性的select語句與deltaQuery屬性的select語句是不一樣的,差異在於多了一個where modify_date > '${dataimporter.last_index_time}'.
這是因爲solr每次在全量導入時或者增量導入結束時,都會在solrhome\conf\dataimport.properties文件中爲每一個entity更新一個導入時間標誌,我本地截圖如下:
這個配置文件裏的屬性對象可以在db-data-config.xml裏以${}佔位符方式填充數值。
重點1:所以在執行deltaQuery時,只會導入數據滿足爲:modify_date > '${dataimporter.last_index_time}',以此實現增量導入。否則就是全量導入!!!
重點2:在deltaQuery語句中,select字段一定要加上你想更新到索引的字段,否則默認不導入爲索引!!
 
solr瀏覽器管理界面增加索引數據
solr也支持在瀏覽器管理界面增加索引數據,但此類增加並不會同步到mysql數據庫中去,要使它同步,好像也是可以的,就是設置起來比較複雜,而且還需要考慮性能方面。
選擇core3,點擊Documents菜單:
在Document(s)輸入框裏輸入要增加的索引數據(可同時增加多個),注意,這裏的數據格式一定要與Document Type輸入框裏的數據類型保持一致,至於/update則來源於默認的solrconfig.xml配置文件,該文件的requestHandler標籤定義了這些行爲,比如/select /update 你也可以自定義一些其他標籤。
執行Submit Document按鈕之後,solr服務器響應結果如下:
status:0 表示索引插入操作執行成功。
QTime 的執行單位是毫秒ms。

注意:增量更新需要寫兩個sql(deltaImportQuery、deltaQuery)
deltaImportQuery="select * where id='${dih.delta.id}'"
deltaQuery="select id from book_dept where modify_time > '${dih.last_index_time}'"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章