安裝好solr6.3服務,我安裝在centos7系統中,在/opt目錄下html
步驟1:java
建立一個core,這裏用hubin爲例mysql
步驟2:web
把mysql所需的jar包(mysql驅動包mysql-connector-java-5.1.38.jar)和solr-6.3.0/dist下的solr-dataimporthandler-6.3.0.jar和solr-dataimporthandler-extras-6.3.0.jar都複製到項目/opt/solr-6.3.0/server/solr-webapp/webapp/WEB-INF/lib/下。而後在solrconfig.xml文件中加入<lib dir="/opt/solr-6.3.0/server/solr-webapp/webapp/WEB-INF/lib/" regex=".*\.jar" />(就是把WEB-INF\lib裏面的jar包配置到項目中,我這裏用的是絕對地址。這段代碼大約在solrconfig.xml的70多行處,前面有一堆相似的代碼。)sql
步驟3:數據庫
在MYSQL中新建一張表。我這裏用的是Navicat管理工具進行建立的。這裏的表名是goods。字段以下圖所示:apache
步驟4:centos
在solrconfig.xml的 <requestHandler name="/select" class="solr.SearchHandler">之上添加:
tomcat
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> app
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
而後在conf下新建data-config.xml文件。裏面內容以下:
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdata" user="root" password="220316" batchSize="-1" />
<document>
<entity name="goods" pk="id" dataSource="source1"
query="select * from goods"
deltaImportQuery="select * from goods where id='${dih.delta.id}'"
deltaQuery="select id from goods where updateTime> '${dataimporter.last_index_time}'">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="number" name="number"/>
<field column="updateTime" name="updateTime"/>
</entity>
</document>
</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信息:
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="string" indexed="true" stored="false"/>
<field name="number" type="int" indexed="true" stored="false"/>
<field name="updateTime" type="date" indexed="true" stored="true" />
<field name="_version_" type="long" indexed="true" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<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 輸入以下設置:
選擇剛剛添加的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中修改以下:
<!-- <schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory> -->
<!-- <processor class="solr.AddSchemaFieldsUpdateProcessorFactory">
<str name="defaultFieldType">strings</str>
<lst name="typeMapping">
<str name="valueClass">java.lang.Boolean</str>
<str name="fieldType">booleans</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.util.Date</str>
<str name="fieldType">tdates</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Long</str>
<str name="valueClass">java.lang.Integer</str>
<str name="fieldType">tlongs</str>
</lst>
<lst name="typeMapping">
<str name="valueClass">java.lang.Number</str>
<str name="fieldType">tdoubles</str>
</lst>
</processor> -->
<schemaFactory class="ClassicIndexSchemaFactory"/>