生活随笔
收集整理的這篇文章主要介紹了
Solr4.7从数据库导数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實際工程應用中,從數據庫導出數據創建索引再常見不過了,現在實驗一下從數據庫導入數據創建索引。
?
一、版本說明
Solr版本:4.7.0
數據庫:sqlserver2005
?
二、配置步驟
1、? 準備的jar包
1)? solr-dataimporthandler-extras-4.7.0.jar;在solr發布包solr-4.7.0\dist里面有
2)? solr-dataimporthandler-4.7.0.jar;在solr發布包solr-4.7.0\dist里面有
3)? jtds-1.2.2.jar;網上自己找
2、? 修改solr的core配置
要想哪個core從數據庫導入數據建索引就修改哪個core的配置。
?
2.1修改solrconfig.xml
添加如下這段配置:
[html]?view plaincopy
<requestHandler?name="/dataimport"?class="org.apache.solr.handler.dataimport.DataImportHandler">??? ??????<lst?name="defaults">??? ???????????<str?name="config">data-config.xml</str>??? ??????</lst>??? </requestHandler>??
2.2添加data-config.xml
在solrconfig.xml同一個文件夾內建立data-config.xml,其配置如下:
[html]?view plaincopy
<?xml?version="1.0"?encoding="UTF-8"??>?? ?? <dataConfig>??? ??<dataSource?type="JdbcDataSource"??? ??????????????driver="net.sourceforge.jtds.jdbc.Driver"??? ??????????????url="jdbc:jtds:sqlserver://localHost/MyHousekeeper"??? ??????????????user="sa"??? ??????????????password="123456"/>??? ??<document>??? ????????<entity?name="pay"?query="SELECT?payId,payName,payMoney,payDescription,payDatetime?FROM?t_pay">?? ????????<field?column="payId"??????????name="id"?/>?? ????????<field?column="payName"????????name="name"?/>?? ????????<field?column="payMoney"???????name="money"?/>?? ????????<field?column="payDescription"?name="description"?/>?? ????????<field?column="payDatetime"????name="datetime"?/>?? ????????</entity>??? ??</document>??? ?? </dataConfig>??
2.3修改schema.xml
修改這個的目的是讓solr知道有哪些field,是否需要索引,是否需要在索引庫中存儲原文,以及field類型。在上面的sql中有很多種數據類型。
payId:整型
payName:字符型
payMoney:浮點數
payDescription:大文本
payDatetime:日期時間格式
首先在schema.xml中申明field類型,配置在<types> </types>內。下面配置的sring類型是不會做分詞處理的,視為完整的一個詞,text_ik是一個中文分詞器ik-analyzer,專門處理中文分詞。
如下:
[html]?view plaincopy
<types>?? ???<fieldtype?name="string"??class="solr.StrField"???????sortMissingLast="true"?omitNorms="true"/>?? ???<fieldType?name="long"????class="solr.TrieLongField"??precisionStep="0"?positionIncrementGap="0"/>?? ???<fieldType?name="float"???class="solr.TrieFloatField"?precisionStep="0"?positionIncrementGap="0"/>?? ???<fieldType?name="date"????class="solr.TrieDateField"??precisionStep="0"?positionIncrementGap="0"/>?? ???<fieldType?name="text_ik"?class="solr.TextField">??? ?????<analyzer?class="org.wltea.analyzer.lucene.IKAnalyzer"/>??? ???</fieldType>??? ??</types>??
然后申明field,field的名字應該和sql的查詢結果集列名一致,如果不一致,需要在data-config.xml中entity標簽中用field指明列和field的對應關系。
Field配置如下:
[html]?view plaincopy
<fields>????? ??<field?name="_version_"???????type="long"???????indexed="true"??stored="true"/>?? ??? ??<field?name="id"??????????????type="long"???????indexed="true"??stored="true"??multiValued="false"?required="true"/>?? ??<field?name="name"????????????type="string"?????indexed="true"??stored="true"??multiValued="false"?/>??? ??<field?name="money"???????????type="float"??????indexed="true"??stored="true"??multiValued="false"?/>??? ??<field?name="description"?????type="text_ik"????indexed="true"??stored="true"??multiValued="false"?/>??? ??<field?name="datetime"????????type="date"???????indexed="true"??stored="true"??multiValued="false"?/>??? ?</fields>?? 其中如下field是必須的,用于標記版本信息,由solr內部自己維護。
[html]?view plaincopy
<field?name="_version_"???????type="long"???????indexed="true"??stored="true"/>?? 三、導入測試
進入solr管理界面,command選擇full-import全部導入;entity需要導入的實體,也就是配置的哪個sql,點擊execute執行導入,如果數據很多的話需要導一段時間,不時的點一下refresh status刷新一下,看看導入是否完成,導入完成后會告訴你導入了多少數據,用了多少時間。如下圖
做個查詢測試,query,
q,description:米;查詢description這個field名的米相關數據
wt,json;查詢結果返回格式,默認json
execute query,執行查詢,看到返回的json格式的查詢結果了。
參考文獻:
1)??http://www.chepoo.com/solr4-database-import-create-index.html
2)??http://blog.csdn.net/bruce128/article/details/17796705
轉載于:https://www.cnblogs.com/duyinqiang/p/5696729.html
總結
以上是生活随笔為你收集整理的Solr4.7从数据库导数据的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。