Solr學習(一)-基本介紹,安裝配置及運用4.9.1版本[親測]

Solr學習(一)-基本介紹,安裝配置及運用4.9.1版本[親測]

什麼是Solr

     solr是一個java搜索引擎服務器(是一套war程序),內部集成了Lucene(apache提供的一些對搜索引擎做支持的jar包)。

搜索引擎運行原理

    搜索引擎首先導入數據庫數據,用戶在操作時查詢所搜引擎,搜索引擎查詢導入的數據將數據返回給用戶。具體流程如圖。在這裏涉及定時導入數據庫原始數據,因此Sorl建立索引時,搜索效率提高,實時索引搜索效率不高。在滿足降低數據庫連接壓力的同時,如果不在實時插入查詢,solr搜索引擎的暫時可以滿足搜索的速度需求。

Solr的功能

    (1)數據導入

    (2)增量更新

    (3)數據檢索(全文檢索,高亮顯示,精確搜索)

 Solr下載地址

     下載地址:http://archive.apache.org/dist/lucene/solr/

Solr各個版本介紹

版本 發佈時間 說明
1.1 2007-01-18 -
1.2 2007-06-06 -
1.3.0 2008-09-15 lucene2.3;引入拼寫檢查、數據導入、排序、分佈式搜索
1.4.0 2009-11-09 lucene2.9.3
1.4.1 2010-06-24 -
3.1.0 2011-03-30 Lucene 3.1.0
3.5.0 2011-11-25 -
4.0.0 2013-01-16 Java 1.6以上,ZooKeeper 3.3.6;引入solrcloud
4.1.0 2013-01-21 Java 1.6以上,lucene4.1
4.2.0 2013-03-11 有bug,不能線上使用
4.3.1 2013-06-14 可以線上使用,還未引入5.0的新特性
4.4.0 2013-07-22 有bug,不能線上使用
4.5.0 2013-10-04 Java 1.6以上,ZooKeeper 3.4.5
4.6.0 2013-11-22 有bug,不能線上使用
4.7.1 2014-04-01 Java 1.6以上,最後一個採用舊版配置方法版本
4.8.0 2014-04-27 Java 1.7以上,ZooKeeper 3.4.6
4.9.1 2014-09-21 Java 1.7以上
4.10.0 2014-09-02 Java 1.7以上
5.0.0 2015-02-19 Java 1.7以上,Jetty 8.1.10
5.4.0 2015-12-10 Java 1.7以上,Jetty 9.2.13
5.5.0 2016-02-20 Java 1.7以上,Solr schema version支持1.6
6.0.0 2016-04-07 Java 1.8以上,Jetty 9.3.8
6.1.0 2016-06-16 Java 1.8以上,Jetty 9.3.8
6.2.0 2016-08-24 Java 1.8以上
6.3.0 2016-11-08 Java 1.8以上
6.4.0 2017-01-20 Java 1.8以上
6.5.0 2017-03-25 Java 1.8以上
6.6.0 2017-06-26 Java 1.8以上

Tomcat與JDK對應關係

Solr4.9.1依賴環境

    (1)JDK1.7+
    (2)Tomcat7.0+

Solr安裝步驟

初始化安裝環境

    (1)安裝JDK1.8(具體安裝過程不贅述,安裝完成後,注意配置環境變量,Path及CLASSPATH)

    (2)準備Tomcat環境(不贅述)

初始配置 solr

--》官網下載solr4.9.1的程序安裝包

下載地址:http://archive.apache.org/dist/lucene/solr/

--》本次用於演示下載Windows版本,下載完成後,解壓solr的zip包,目錄如下

--》將dist\solr-4.9.1.war文件複製到tomcat的webapps目錄下,並將文件命名爲solr.war

--》複製 solr解壓包下example\lib\ext 下所有的jar 到tomcat 的lib目錄下

--》在計算機本地G:\Study\solr新建一個文件夾solr_home(用於管理Core的配置目錄,當然,路徑及文件夾名稱,可以在任意路徑隨便起名字,但建議不要使用sorl), 然後複製solr-4.9.1\example\solr 下的所有文件到 solr_home下

--》啓動tomcat,待tomcat啓動成功後,關閉tomcat。打開tomcat的webapps目錄。此時solr的war包以及被解壓成solr文件夾。刪除tomcat 的webapps目錄下的solr的war包,保留solr文件夾。注意,先關閉tomcat在刪除war包,避免tomcat誤認爲war進行修改將解壓的solr文件夾一併刪除。

啓動完成後,關閉tomcat

--》修改配置文件 apache-tomcat-7.0.67\webapps\solr\WEB-INF\web.xml

<env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>G:/Study/sorl/solr_home</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

--》重新啓動tomcat,訪問solr(http://localhost:端口號/solr/),如出現以下界面則solr部署成功。

新建數據配置 core

    core(collection):類似於數據庫中的視圖,一個core代表一種類型的數據集合。

--》測試數據庫testdb,創建user測試表

--》新建core(solr中把配置的每一個模塊都叫core),在solr_home目錄下,拷貝collection1文件夾,並起名爲user。打開test文件夾,修改core.properties文件,將name修改爲user

--》重新啓動tomcat,並訪問solr,如出現以下界面,則表示新建user core成功

新增數據庫配置

    到目前爲止,我們已經完成了solr的基礎配置,並且創建了user core,接下來我們需要把數據的數據和搜索引擎連接起來,讓搜索引擎可以讀取數據庫的數據。

--》拷貝數據庫連接jar包(mysql-connector-java-5.1.18.jar)到tomcat的lib目錄

--》打開user的conf文件夾中的solrconfig.xml文件,在<requestHandler name="/select" class="solr.SearchHandler">前面上加上一個dataimport的處理的Handler

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">data-config.xml</str>
    </lst>
</requestHandler>

--》在user的的conf文件夾下並新建 data-config.xml文件,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
	<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
	url="jdbc:mysql://127.0.0.1:3306/testdb" user="root" password="root" />
	<document name="user_doc">
		<entity name="user" pk="user_id" query=" select u.user_id,u.user_name,u.user_account from user u">
			<field column="user_id" name="userId"/>
			<field column="user_name" name="userName"/>
			<field column="user_account" name="userAccount"/>
		</entity>
	</document>
</dataConfig>

    說明:

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

--》打開user的conf目錄下的schema.xml(schema.xml 是solr對數據庫裏的數據進行索引管理和數據字段展示管理的配置文件)文件

        (1)刪除多餘的field,保留_version_ 和text這個兩個field(包括所有dynamicField及copyField,注意不要刪除fieldType)
        (2)添加索引字段:這裏每個field的name要和data-config.xml裏的entity的field的name一樣,一一對應。

   <field name="userId" type="int" indexed="true" stored="true"/>
   <field name="userName" type="string" indexed="true" stored="true"/>
   <field name="userAccount" type="string" indexed="true" stored="true"/>

 

    (3)<uniqueKey></uniqueKey>標籤填寫爲主鍵的field的name

<uniqueKey>userId</uniqueKey>

--》將solr-4.9.1/dist目錄下導入數據的JAR包拷貝到tomcat的webapps/solr的lib目錄下

--》啓動Tomcat,發現報錯

--》點擊logger,查看錯誤原因

錯誤原因爲MA147LL/A,之所以會出現這個錯誤,是因爲solr要求主鍵必須設置爲string類型,解決辦法如下:

打開solr_home/user/conf目錄下elevate.xml文件,並註釋掉一下代碼

 <query text="ipod">
   <doc id="MA147LL/A" />  <!-- put the actual ipod at the top -->
   <doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
 </query>

--》重啓tomcat,執行數據導入

    說明:

         Common :常用指令

                     (1) full-import:數據導入

                     (2)delta-import:數據更新

                     Clean,指的是是否情況當前更新的索引,Commit:提交。,

事實上,數據導入執行的命令是:dataimport?command=full-import&clean=true&commit=true,而數據更新執行的是:dataimport?command=delta-import&clean=false&commit=true

--》查詢數據

     Solr查詢語法:

        (1) q – 查詢字符串,一般用於關鍵詞過濾
        (2) fl – 指定返回字段
        (3) start –分頁查詢開始值
        (4) rows – 指定返回結果最多有多少條記錄,配合start來實現分頁。
        (5) sort – 排序
        (6)wt – (writer type)指定輸出格式(xml, json,
        (7) fq – (filter query)過慮查詢
                 作用:在q查詢符合結果中同時是fq查詢符合的

--》到目前爲止,我們已經將數據庫的數據導入到solr當中了,並且已經查詢成功。

配置增量更新

    以上的步驟我們實現瞭如何將數據庫的數據導入到solr中,接下來需要配置solr的增量更新,即定時將數據庫的數據導入到solr中。

--》將資料中提供的apache-solr-dataimportscheduler-1.0.jar包添加至solr的lib目錄下

    注:apachesolrdataimportscheduler.jar 的jar 包是apache 提供的用於增量更新的jar 包,但apache 提供的原jar 包中,代碼有BUG。 

apache-solr-dataimportscheduler-1.0.jar 下載地址:https://pan.baidu.com/s/1ozicrbGGlY1nDda3eWzH5w  提取碼:p9ld 

--》增加增量更新配置文件,在solr_home文件夾下新建conf文件夾,並新建名爲dataimport.properties的配置文件,配置如下,,需注意的是各個屬性後表面不要跟空格

#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
#多個core使用,分隔
syncCores=user
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost
# solr server port
# [defaults to 80 if empty]
port=8080
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# 增量索引的參數
# URL params [mandatory]
# remainder of URL
params=/dataimport?command=delta-import&clean=false&commit=true
# 重做增量索引的時間間隔
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
interval=1
# 重做全量索引的時間間隔,單位分鐘,默認7200,即5天;
# 爲空,爲0,或者註釋掉:表示永不重做索引
#reBuildIndexInterval=7200
# 重做索引的參數
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
# 重做索引時間間隔的計時開始時間,第一次真正執行的時間=reBuildIndexBeginTime+reBuildIndexInterval*60*1000
# 兩種格式:2012-04-11 03:10:00 或者 03:10:00,後一種會自動補全日期部分爲服務啓動時的日期
reBuildIndexBeginTime=03:10:00

 

--》新增增量更新數據的監聽器,在solr的web.xml中加入以下監聽器

<listener>
    <listener-class>
        org.apache.solr.handler.dataimport.scheduler.ApplicationListener
    </listener-class>
</listener>

--》修改導入數據查詢SQL,在user的的conf文件夾下並新建 data-config.xml文件中entity節點中添加屬性如下:

deltaImportQuery="select u.user_id,u.user_name,u.user_account from user u where u.user_id='${dih.delta.user_id}'" 
            deltaQuery="SELECT u.user_id FROM user u where update_date > '${dih.last_index_time}'"

      說明:deltaQuery用於檢查數據是否進行更新,因此設計表時表中必須存有一個date類型的字段表示數據的更新時間,否則無法進行數據更新,deltaImportQuery用於數據更新,一般通過主鍵進行更新,當然如果你這麼玩,如下圖,也是沒有問題的

--》啓動Tomcat進行測試

    (1)重新導入數據

    (2)查詢

    (3)修改數據庫,數據,注意修改更新時間,且更新時間必須大於上次更新時間

    (4)一分鐘後,重新查詢

--》完成

配置IKAnalyzer 分詞器

    solr 如果是 3.x 版本的用 IKAnalyzer2012_u6.zip 如果是 4.x 版本的用 IK Analyzer2012FF_hf1.zip,一定要對應上,要不然會配置失敗。

    IK 分詞器3.x 下載地址: https://pan.baidu.com/s/1Eslip-Qfc44ol5jSSBrLQw  提取碼:tbf3 

    IK 分詞器4.x 下載地址:http://download.csdn.net/download/tjcyjd/8420639  百度網盤:鏈接:https://pan.baidu.com/s/1R2pxF8jXHd54tqmxIzmRSQ  提取碼:lxjx 

--》下載IKAnalyzer,解壓,將ik的所有jar文件 拷貝到 webapps\solr\WEB-INF\lib 目錄下

--》在webapps\solr\WEB-INF\下新建classes文件夾,將IKAnalyzer.cfg.xml和stopword.dic(用戶可以在這裏配置自己的擴展停止詞字典)文件拷貝到改文件夾下。

--》在webapps\solr\WEB-INF\classes目錄下,新建ext.dic文件(用戶可以在這裏配置自己的擴展字典)

 

--》在 solr_home\user\conf\schema.xml 增加如下配置

   <fieldType name="text_ik" class="solr.TextField">
      <analyzer  type="index"  isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
      <analyzer  type="query"  isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
   </fieldType>

--》修改solr_home\user\conf\schema.xml將userAccount和userName指定成爲text_ik類型

   <field name="userName" type="text_ik" indexed="true" stored="true"/>
   <field name="userAccount" type="text_ik" indexed="true" stored="true"/>

--》重啓Tomcat,訪問solr測試重新導入數據分詞器

 

配置Solr對多個字段進行檢索

--》編輯user core的conf目錄下schema.xml文件,新建field指定multiValued="true”,配置copyField

   <field name="queryContent" type="text_ik" indexed="true" stored="true" multiValued="true"/>
   <copyField source="userAccount" dest="queryContent"/>
   <copyField source="userName" dest="queryContent"/>

--》重啓tomcat,並重新導入索引

--》查詢

--》完成(附件中,不包含這部分)

 

附件:

Solr學習(一)安裝文件.zip 鏈接:https://pan.baidu.com/s/1XMHSYOYdnhQimtDYHwLZ3w  提取碼:xxvx 

Solr學習(一)測試文件.zip 鏈接:https://pan.baidu.com/s/1-KIibdKE_hLyVjGWYEK3GQ  提取碼:s327 

 

參考文獻:《Solr配置中文分詞器IK Analyzer詳解》

參考文獻:《Solr與JDK對應版本關係,Tomcat與JDK版本對應關係》

參考文獻:《爲什麼我們項目用Solr而不用ElasticSearch》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章