solr mysql 增量索引_solr中实现MySQL数据全量索引和增量索引
緊接上篇ansj分詞整合后,開始需要做索引。索引分增量和全量,可以直接連接數據庫去做,也可以通過程序去做,以下實現連接數據庫去做,相對來說比較簡單。
1.修改multicore/new_core/conf/solrconfig.xml文件(上篇提到過的),在里面新增
data-config.xml
delta-data-config.xml
其中第一段是專門做全量索引的,第二段做增量索引(主要是靠DataImportHandler類實現)
2.新增multicore/new_core/conf/data-config.xml文件
url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useUnicode=true"
user="root" password="HyS_Db@2014"/>
query="select * from mall_goods limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"
transformer="RegexTransformer">
dataSource不用說了,數據源配置來的
entity文檔中的實體配置(注意pk="id" 不能隨便改 ,需要和schema.xml中的id匹配,否則會報“?org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id”)
query 查詢語句(可分頁)
transformer 暫時不清楚干啥
field定義列名
3.新增multicore/new_core/conf/delta-data-config.xml文件
url="jdbc:mysql://192.168.0.81:3306/new_mall?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useUnicode=true"
user="root" password="HyS_Db@2014"/>
query="select * from mall_goods"
deltaImportQuery="select * from mall_goods where goods_id='${dih.delta.id}'"
deltaQuery="select goods_id as id from mall_goods where update_date > '${dih.last_index_time}'"
transformer="RegexTransformer">
deltaQuery查詢出有更改過的id
deltaImportQuery根據id查詢
4.修改multicore/new_core/conf/schema.xml文件,定義field索引配置
注意上面選擇一下text_ansj
5.solr的war包可能還缺少部分jar包,需要把mysql的jar,以及solr項目中dist目錄下的jar包都放到solr的web站點中
6.開始運行
全量:http://solr.xxxx.com:8082/new_core/dataimport?command=full-import&commit=true&clean=false&offset=0&length=100000(其中0到100000的數據建立索引)
增量:http://solr.ehaoyao.com:8082/new_core/deltaimport?command=delta-import&entity=MallGoods
entity:是document下面的標簽(data-config.xml)。使用這個參數可以有選擇的執行一個或多個entity ? 。使用多個entity參數可以使得多個entity同時運行。如果不選擇此參數那么所有的都會被運行。
clean:選擇是否要在索引開始構建之前刪除之前的索引,默認為true
commit:選擇是否在索引完成之后提交。默認為true
optimize:是否在索引完成之后對索引進行優化。默認為true
debug:是否以調試模式運行,適用于交互式開發(interactive development mode)之中。
請注意,如果以調試模式運行,那么默認不會自動提交,請加參數“commit=true”
注意:在做增量索引的時候
很容易出現deltaQuery has no column to resolve to declared primary key pk='id'這種異常
主要是因為ID" must be used as it is in 'deltaQuery' select statement as "select ID from ..."
(if you different name for ID column in database, then use 'as' keyword in select statement. In my case I had 'studentID' as primary key in student table. So I used it as "select studentID as ID from ..."
--> The same applies to 'deletedPkQuery'
At present its working fine for me. Any updation in database is reflected in Solr as well.
所以,delta-data-config.xml文件需要注意一下pk的值
參考連接:
http://shiyanjun.cn/archives/444.html
http://blog.duteba.com/technology/article/70.htm
http://www.devnote.cn/article/89.html
http://qiaqia26.iteye.com/blog/1004996
http://zzstudy.offcn.com/archives/8104
http://blog.csdn.net/duck_genuine/article/details/5426897
------------------------------------------------------------------------------------------------------------------------------
最后補充:
有時候需要刪除索引數據,可以這樣刪除
http://xxxx/new_core/update/?stream.body=*:*&stream.contentType=text/xml;charset=utf-8&commit=true
new_core 表示你要刪除哪個核下面的索引
總結
以上是生活随笔為你收集整理的solr mysql 增量索引_solr中实现MySQL数据全量索引和增量索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS10新特性,适配教程,XCode8
- 下一篇: asp.net2.0学习指导 菜鸟到中级