solr這裏使用的是solr5.5,由於該版本仍然支持jdk1.7適用性較廣,可是該方法也能用在solr6.0上。 經過該方法咱們會搭建一個能夠從數據庫導入數據的solr環境。java
首先咱們解壓下載到的solr壓縮包mysql
首先咱們向dist目錄中放入咱們須要依賴的外部jar包,這裏咱們使用的是mysql數據庫因此咱們須要加入mysql的driver,mysql-connector-java-5.1.6.jar這個包能夠去網上找一下很常見。sql
首先咱們要創建本身的core配置文件,拷貝\solr-5.5.2\server\solr\configsets\data_driven_schema_configs文件夾到\solr-5.5.2\server\solr\,並將其更名爲SolrTest,該配置文件將做爲咱們core配置文件的模板。下面還要對它稍做修改。數據庫
在新創建的SolrTest文件夾的\conf\solrconfig.xml文件中搜索<requestHandler name="/select"咱們能夠看到以下內容apache
<requestHandler name="/select" class="solr.SearchHandler"> <!-- default values for query parameters can be specified, these will be overridden by parameters in the request --> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <!-- <str name="df">text</str> --> </lst>
咱們在它的上面加入DataImportHandler瀏覽器
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
要使上面的DataImportHandler生效咱們還要在配置文件中引入相關jar包,此外爲了從數據庫導入數據還要引入數據庫驅動jar包。 在新創建的SolrTest文件夾的\conf\solrconfig.xml文件中搜索<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />能夠看到以下內容性能
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />ui
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />url
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />code
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-5.1.6.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
其中新加入了solr-dataimporthandler和mysql-connector-java-5.1.6.jar,他們分別是數據導入與數據庫驅動的相關jar包。
咱們的solr環境是須要從數據庫導入數據,爲了實現這一功能咱們還要進行一些配置。
實驗數據表
上面的DataImportHandler配置中咱們設定了配置文件文件名爲data-config.xml。所以咱們要在SolrTest/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/solrtest" user="root" password="root" batchSize="-1" /> <document> <entity name="testdata" pk="id" dataSource="source1" query="select * from testdata" deltaImportQuery="select * from testdata where id='${dih.delta.id}'" deltaQuery="select id from testdata where ts> '${dataimporter.last_index_time}'"> <field column="id" name="id"/> <field column="name" name="name"/> <field column="age" name="age"/> <field column="ts" name="ts"/> </entity> </document> </dataConfig>
其中deltaQuery是增量查詢,經過該語句查詢新增的條目。而後根據deltaImportQuery指定的SQL語句返回全部這些ID的數據,即爲此次增量導入所要處理的數據。「${dih.delta.id}」和 「${dataimporter.last_index_time}」爲內置變量,分別爲索引id和索引時間。
managed-schema配置field信息
而後咱們要打開SolrTest/conf/managed-schema文件,搜索<field name="id" 在這些field標籤下加入咱們數據表對應column的設置,以下
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="_root_" type="string" indexed="true" stored="false"/> <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/> <field name="name" type="string" indexed="true" stored="true" /> <field name="age" type="int" indexed="true" stored="false" /> <field name="ts" type="date" indexed="true" stored="true" /> <copyField source="*" dest="_text_"/>
說明:這裏加入了name、age、ts幾項,其中id一項使用默認的就好,它知足了個人設置要求。 field 標籤帶有不少配置,其中:
複製域即表示把某個域的值複製到一個目標域上面,那若是把多個域的值複製到一個目標域上面呢,你能夠進行屢次複製,體現到 XML 配置上就是相似這樣的配置:
<copyField source="title" dest="text"/>
<copyField source="body" dest="text"/>
配置文件修改完了咱們準備創建本身的core
首先運行solr solr-5.5.2/bin/solr start -p 8983
瀏覽器訪問http://localhost:8985/solr,選擇Core Admin以下
確認後索引建成了,準備導入數據
點擊Dataimport
執行一下query的查詢 數據已經導入進來了
集羣環境與單機環境最大的不一樣就是配置文件位於zookeeper,整個集羣的配置由zookeeper進行管理。
首先仍是按單機的步驟改寫配置文件。
配置文件改寫完成後,執行solr-5.5.2/server/scripts/cloud-scripts/zkcli.sh腳本,命令以下
./zkcli.sh -zkhost localhost:2181 -cmd upconfig -confdir /usr/local/src/solr-5.5.2/server/solr/SolrTest/conf/ -confname SolrTest
其中 localhost:2181 爲我搭建的zookeeper服務地址, /usr/local/src/solr-5.5.2/server/solr/SolrTest/conf/爲咱們修改的配置文件地址,SolrTest爲core配置的配置名
執行該命令後咱們會在zookeeper上見到
確實有SolrTest的節點了。
solr-5.5.2/bin/solr -c -z localhost:2181 -p 8983 solr-5.5.2/bin/solr -c -z localhost:2181 -p 8984
說明 solr命令的-c參數表明could集羣,-z表明使用外部zookeeper -p 表明監聽的端口。
首先瀏覽器訪問http://localhost:8983/solr,選擇Core Admin以下
首先瀏覽器訪問http://localhost:8984/solr,選擇Core Admin以下
說明: 這裏由於資源有限,我在一臺機器上啓動了兩個solr實例,在創建core的過程當中有這麼幾個參數
集羣創建好了
導入數據和單機一個套路,不貼圖了