solr6.4.1搜索引擎(3)增量同步mysql數據庫


尚未實現首次同步mysql數據庫的,請參考我的另一篇文章http://www.cnblogs.com/zhuwenjoyce/p/6512378.html(solr6.4.1搜索引擎同步mysql數據庫)
 
過時的類
在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。
 
其它以java代碼使用solrJ-api接口也是可以導入索引的,這個另外文章再介紹。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM