solr导入mysql数据库
感謝ITeye的博主viskyzz分享的經驗,筆者基本參考ta的方法。然而,解決中間出現的問題時也融入了自己的經驗。
查看ta的原文請戳:
http://tbwuming.iteye.com/blog/1152333
?
默認已經建好了數據庫的表。
配置過程:
1.改寫solrconfig.xml,向其中加入:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
????????? <lst name="defaults">
?????????????? <str name="config">data-config.xml</str>
????????? </lst>
</requestHandler>
同時記得要導入相應lib,否則會報錯:requesthander init failure,java.lang.ClassNotFoundException: org.apache.solr.handler.dataimport.DataImportHandler
?<lib dir="../../../dist" regex="solr-dataimporthandler-\d.*\.jar" />
2.在與solrconfig.xml相同的目錄下,添加data-config.xml,寫入:
<dataConfig>
? <dataSource type="JdbcDataSource"
????????????? driver="com.mysql.jdbc.Driver" //一般都是這樣,這個看你下載的mysql的jdbc驅動中Driver.class的目錄層次,把.想成/就好
????????????? url="jdbc:mysql://localhost/你的數據庫名"
????????????? user="你的用戶名"
????????????? password="你的密碼"/>
? <document>
??? <entity name="id"
??????????? query="select * from course">
??? </entity>
? </document>
</dataConfig>?
3.下載mysql的jdbc驅動,將其中的.jar解壓出來,復制到$solr_home$/example/lib下。但是筆者啟動solr后發現還是會報錯not found jdbc driver。筆者找了很多資料,都說的是配置問題,但是上面的配置應該是沒有問題了。最后將.jar復制到$solr_home$/example/lib/ext下,就好了。
所以請復制到lib以及lib下的ext下吧!
4.根據數據庫的各個屬性(比如例子中的id,user,title,content,time),改寫schema.xml,最好是先備份原來的,中間出現各種報錯的話方便拯救。往里添加:
? <types>?? ?
???? <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
???? <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
???? <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
????? <analyzer type="index">
??????? <tokenizer class="solr.StandardTokenizerFactory"/>
??????? <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
??????? <filter class="solr.LowerCaseFilterFactory"/>
????? </analyzer>
????? <analyzer type="query">
??????? <tokenizer class="solr.StandardTokenizerFactory"/>
??????? <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
??????? <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
??????? <filter class="solr.LowerCaseFilterFactory"/>
????? </analyzer>
??? </fieldType>
???? <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> ?
</types>
<fields>
?? <field name="id" type="tint" indexed="true" stored="true" required="true" />
?? <field name="user" type="string" indexed="true" stored="true"/>
?? <field name="title" type="text" indexed="true" stored="true"/>
?? <field name="content" type="text" indexed="true" stored="true" />
?? <field name="time" type="date" indexed="true" stored="true" default="NOW"/> ?
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>title</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>?
</schema>
(運行起來應該會報錯,錯誤原因往往是field的定義和原來schema中的定義重復,可以稍作刪改)
5.筆者為了防止重復定義,把上面的屬性皆改為:myid,myusr,mytitle,mycontent,mytime。接著報錯Document is missing mandatory uniqueKey field: id 。
經過各種嘗試+想像,發現是因為solr對文檔建索引時,要按照文檔的獨一無二的id,id是不可缺少的,相當于關系數據庫的主鍵。
因此,數據庫的表中必須有一項id屬性,可以是本身的主鍵,也可是為了索引而添加的。因此,表中的每一項其實相當于一個文檔。
筆者解決方法就是將數據庫中的主鍵myid改回id,并且刪掉schema.xml中的重復定義,就好了。
6.啟動solr,切到$solr_home$/example下,java -jar start.jar
7.若報錯QueryElevationComponent?requires?theschema?to?have?a?uniqueKeyField?implemented?using?StrField?at?org.apache.solr.handler.component.QueryElevationComponent.inform
,改寫solrconfig.xml,注釋掉以下:
<!-- Query Elevation Component
?????? http://wiki.apache.org/solr/QueryElevationComponent
?????? a search component that enables you to configure the top
?????? results for a given query regardless of the normal lucene
?????? scoring.
??? -->
? <searchComponent name="elevator" class="solr.QueryElevationComponent" >
??? <!-- pick a fieldType to analyze queries -->
??? <str name="queryFieldType">string</str>
??? <str name="config-file">elevate.xml</str>
? </searchComponent>
? <!-- A request handler for demonstrating the elevator component -->
? <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
??? <lst name="defaults">
????? <str name="echoParams">explicit</str>
??? </lst>
??? <arr name="last-components">
????? <str>elevator</str>
??? </arr>
? </requestHandler>
8.運行命令:在瀏覽器中輸入:http://localhost:8983/solr/dataimport?command=full-import 來完成全量數據導入,在每次全量數據導入執行的時候,原有索引會被刪除,如果不想刪除原有索引,可以運行如下命令:http://localhost:8983/solr/dataimport?command=full-import&clean=false
9.進行搜索,在瀏覽器中輸入http://localhost:8983/solr/admin/,query就可以出來結果了!
轉載于:https://www.cnblogs.com/linlu1142/p/3210871.html
總結
以上是生活随笔為你收集整理的solr导入mysql数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 1236 Network of
- 下一篇: WebService站点服务的地址