搭建Solr6.0服務並從Mysql上導入數據

solr5.4版本也適用

目前百度上面關於solr對MySQL的集成一般都是4.0左右。但是前solr的版本已經到了6.0,很多配置都和一起不一樣了。所以我今天就和大家聊聊solr6.0如何進行MYSQL數據庫的配置。(配置的前提是已經搭建好solr服務器了,如果有什麼不清楚的可以參考這篇博客:點擊打開鏈接)。

步驟1:

  在webapps中solrhome下新建一個文件夾名字叫做mynode(名字不固定,可以隨便取,但是這個名字在後面的配置中會有所關聯。)然後在mynode文件下新建一個名字叫做conf的文件夾(這個文件名字最後不要改。)然後把官網下下來的solr項目中solr-6.0.0\server\solr\configsets\data_driven_schema_configs\conf下的所有東西複製到conf中去。(注意不要複製錯!)最後把solr-6.0\solr-6.0.0\example\example-DIH\solr\db\conf下的admin-extra.html, admin-extra.menu-bottom.html ,admin-extra.menu-top.html三個文件也複製到conf中去。

步驟2:

  把mysql所需的jar包和solr-6.0\solr-6.0.0\dist下的solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar都複製到項目WEB-INF\lib下。然後在solrconfig.xml文件中加入<lib dir="D:/編程工具/tomcat/apache-tomcat-8.0.32-windows-x64/apache-tomcat-8.0.32/webapps/solr/WEB-INF/lib/" regex=".*\.jar" />(就是把WEB-INF\lib裏面的jar包配置到項目中,我這裏用的是絕對地址。這段代碼大約在solrconfig.xml的70多行處,前面有一堆類似的代碼。)

步驟3:

  在MYSQL中新建一張表。我這裏用的是Navicat管理工具進行創建的。這裏的表名是goods。字段如下圖所示:


步驟4:

  在solrconfig.xml的  <requestHandler name="/select" class="solr.SearchHandler">之上添加

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
  2.       <lst name="defaults">  
  3.          <str name="config">data-config.xml</str>  
  4.       </lst>  
  5.  </requestHandler>  

然後在conf下新建data-config.xml文件。裏面內容如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <dataConfig>  
  3.     <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdata" user="root" password="220316" batchSize="-1" />  
  4.   <document>  
  5.         <entity name="goods" pk="id"  dataSource="source1"   
  6.                 query="select * from  goods"  
  7.                  deltaImportQuery="select * from goods where id='${dih.delta.id}'"  
  8.                 deltaQuery="select id from goods where updateTime> '${dataimporter.last_index_time}'">  
  9.   
  10.          <field column="id" name="id"/>  
  11.         <field column="name" name="name"/>  
  12.             <field column="number" name="number"/>  
  13.             <field column="updateTime" name="updateTime"/>  
  14.      </entity>  
  15.   </document>  
  16. </dataConfig>  

說明:

  dataSource是數據庫數據源。Entity就是一張表對應的實體,pk是主鍵,query是查詢語句。Field對應一個字段,column是數據庫裏的column名,後面的name屬性對應着Solr的Filed的名字。其中solrdata是數據庫名,goods是表名。

  其中deltaQuery是增量索引,原理是從數據庫中根據deltaQuery指定的SQL語句查詢出所有需要增量導入的數據的ID號。然後根據deltaImportQuery指定的SQL語句返回所有這些ID的數據,即爲這次增量導入所要處理的數據。核心思想是:通過內置變量“${dih.delta.id}”和 “${dataimporter.last_index_time}”來記錄本次要索引的id和最近一次索引的時間。

  最後在conf文件下的managed-schema配置field信息:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />  
  2. <field name="name" type="string" indexed="true" stored="false"/>  
  3. <field name="number" type="int" indexed="true" stored="false"/>  
  4. <field name="updateTime" type="date" indexed="true" stored="true" />  
  5.    <field name="_version_" type="long" indexed="true" stored="false"/>  
  6.    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />  
  7.    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>  
其中id,name,number,updateTime是上面提到的數據庫字段。下面三個field是系統本身的不能刪除,否則會運行錯誤。

步驟5:

啓動tomcat,並在URL中輸入http://127.0.0.1:8080/solr/index.html路徑。選擇Core admin 輸入如下設置:


設置好之後,點擊Add Core按鈕,進行設置,設置成功後,再core Selector選擇剛剛添加的core。


  選擇剛剛添加的goods實體進行索引操作:我們這兒可以選擇full-import或者delta-import(增量索引),選擇增量索引需要把clean的勾給去掉,不然會清除之前的,增量的索引的初衷是對新增或者修改的記錄重新索引,會追加到原有的索引文件當中。當我們選擇full-import的時候,最好就是把原有的索引文件給清空重新索引。


索引成功如下如所示:


使用query進行測試,輸入sa查出了sa


數據庫中的數據如下圖所示:


這就成功的配置完了MYSQL數據庫了,如果配置過程有啥問題可以參考我這個已經配置成功代碼:點擊打開鏈接


PS:solr-5.0 以上默認對schema的管理是使用managed-schema,不能手動修改,需要使用Schema Restful的API操作。如果要想手動修改配置,把managed-schema拷貝一份修改爲schema.xml,在solrconfig.xml中修改如下:

  1. <!-- <schemaFactory class="ManagedIndexSchemaFactory">  
  2.     <bool name="mutable">true</bool>  
  3.     <str name="managedSchemaResourceName">managed-schema</str>  
  4.   </schemaFactory> -->  
  5.     
  6. <!-- <processor class="solr.AddSchemaFieldsUpdateProcessorFactory">  
  7.       <str name="defaultFieldType">strings</str>  
  8.       <lst name="typeMapping">  
  9.         <str name="valueClass">java.lang.Boolean</str>  
  10.         <str name="fieldType">booleans</str>  
  11.       </lst>  
  12.       <lst name="typeMapping">  
  13.         <str name="valueClass">java.util.Date</str>  
  14.         <str name="fieldType">tdates</str>  
  15.       </lst>  
  16.       <lst name="typeMapping">  
  17.         <str name="valueClass">java.lang.Long</str>  
  18.         <str name="valueClass">java.lang.Integer</str>  
  19.         <str name="fieldType">tlongs</str>  
  20.       </lst>  
  21.       <lst name="typeMapping">  
  22.         <str name="valueClass">java.lang.Number</str>  
  23.         <str name="fieldType">tdoubles</str>  
  24.       </lst>  
  25.     </processor> -->  
  26.       
  27.   <schemaFactory class="ClassicIndexSchemaFactory"/> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章