solr中文全文檢索

其實簡單的說,Solr是一個基於Apache Lucene 項目的開源企業級搜索平臺,是用JAVA編寫的、運行在Servlet容器中的一個獨立的全文搜索服務器(換句話說就是個JAVA-WEB APP),並具有類似REST的HTTP/XML和JSON的API。

主要功能包括全文檢索,高亮命中,分面搜索(faceted search),近實時索引,動態集羣,數據庫集成,富文本索引,空間搜索;通過提供分佈式索引,複製,負載均衡查詢,自動故障轉移和恢復,集中配置等功能實現高可用,可伸縮和可容錯。

Solr和Lucene的關係

Solr是Lucene的一個子項目,它在Lucene的基礎上進行包裝,成爲一個企業級搜索服務器開發框架。
Solr與Lucene的主要區別體現在:

Solr更加貼近實際應用,是Lucene在面向企業搜索服務領域的擴展;
Solr的緩存等機制使全文檢索獲得性能上的提升;通過配置文件的開發使得Solr具有良好的擴展性;
Solr提供了用戶友好的管理界面與查詢結果界面。

1.去官網下載solr

http://www-eu.apache.org/dist/lucene/solr/6.5.1/

還需要安裝java環境 這裏就不說了 請先自行安裝java

2.解壓 進入文件夾 啓動

bin/solr start

通過瀏覽器訪問 http://localhost:8983即可看到Solr的管理界面。上面的這條命令是按照單機模式啓動,還有cloud模式,顧名思義應該是solr集羣了。

這裏寫圖片描述

3.創建一個SolrCore

首先保證Solr正常啓動了
在命令行中新建。轉到$Solr.Install.Dir,輸入一下命令:

bin/solr create -c test

在/server/solr 目錄下 會有一個 test文件夾

4.從mysql導入數據

這個是我的表數據

+----+----------+---------+--------------------------------+
| id | userName | userAge | userAddress                    |
+----+----------+---------+--------------------------------+
|  1 | summer   |      30 | shanghai                       |
|  2 | test1    |      22 | suzhou                         |
|  3 | test1    |      29 | some place                     |
|  4 | lu       |      28 | some place                     |
|  5 | xiaoxun  |      27 | nanjing                        |
|  6 | xiaoli   |      50 | 北京市大興區麗園小區           |
|  7 | zhanlu   |      50 | 上海市浦東新區                 |
|  8 | xiaolsdf |      50 | 黑龍江省哈爾濱市               |
+----+----------+---------+--------------------------------+

首先導入兩個jar分別是solr-dataimporthandler-5.5.0.jar和mysql-connector-java-5.1.38-bin.jar,前一個可以在solr的解壓目錄下的dist目錄中獲取,後一個我想大家都可以找到的。
將這兩個jar包複製到$Solr.Install.Dir/server/solr-webapp/webapp/WEB-INF/lib這個目錄下。

1. 默認dataImport功能在Solr中是禁用的,需要在$SolrHome/conf/solrconfig.xml(我的目錄是server/solr/test)中添加如下配置開啓數據導入功能:

     <!-- Data import from mysql 要放在<config></config>中哦-->

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

因爲前面定義了導入的配置文件是data-config.xml,所以在solrconfig.xml同級目錄下新建這個文件,貼出我的配置,內容如下:

    <dataConfig>
     <dataSource name="fromMysql"
        type="JdbcDataSource"   
            driver="com.mysql.jdbc.Driver"   
            url="jdbc:mysql://localhost:3306/mybatis"   
            user="root"   
            password="root23place"/>
    <document>

      <entity name="user" query="SELECT * FROM user" transformer="RegexTransformer">
           <field column="id" name="id"/>
           <field column="userName" name="userName"/>
           <field column="userAge" name="userAge"/>
           <field column="userAddress" name="userAddress"/>
      </entity>

   </document>
  </dataConfig>

其中fromMysql爲數據源自定義名稱,隨便取,沒什麼約束,type這是固定值,表示JDBC數據源,後面的driver表示JDBC驅動類,這跟你使用的數據庫有關,url即JDBC鏈接URL(mybatis是我要連接的數據庫的名字就是database),後面的user,password分別表示鏈接數據庫的賬號密碼,下面的entity映射有點類似hiberante的mapping映射,column即數據庫表的列名稱,name即schema.xml中定義的域名稱。

在 schema.xml(如果沒有就新建一個)中加入

     <field name="userName" type="string" indexed="true" stored="false" multiValued="true"/>
          <field name="userAge" type="string" indexed="true" stored="false" multiValued="true"/>
     <field name="userAddress" type="string" indexed="true" stored="false" multiValued="true"/>

這裏面的字段就是你數據庫裏要導入的字段

**重啓Solr,進入管理頁面,選中test這個Core,進入Dataimport這個選項。如果一切正常會出現如下圖所示的界面。

這裏寫圖片描述

下面開始導入
這裏寫圖片描述

full-import:全量導入,它會覆蓋原有的索引
delta-import:即增量導入,它會在原有索引的基礎上追加

下面的幾個多選框含義解釋如下:

verbose:這個選項設爲true的話,會打印導入的一些中間過程的詳細信息,有利於調試以及瞭解內部操作細節
clean:表示是否在導入數據創建索引之前先清空掉原有的索引
commit:表示是否立即提交索引
optimize:表示是否優化索引
debug: 表示是否開啓調試模式

選擇你的entity
這裏寫圖片描述

點擊execute導入

我們可以通過Refresh Status這個按鈕刷新狀態,如果出現錯誤或者Fetched一直是0,那就表明有問題了,你要查看日誌進行檢查。如果導入成功,就會看到下圖所示的情況:

這裏寫圖片描述

在查詢中點擊Execute Query按鈕,就能看到我們導進去並建好索引的信息,更具體的查詢用法後面會講到,下面是默認的查詢,顯示文檔的所有信息。
這裏寫圖片描述

這樣就基本成功了

下面來做中文支持

分詞方法很多 我們採用mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )實現的中文分詞器,並實現 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用

將下載的mmseg4j-core-1.10.0.jar和mmseg4j-solr-2.3.0.jar複製到Solr.Install.Dir/server/solrwebapp/webapp/WEBINF/libTomcatservlet TomcatDir/webapps/solr/WEB-INF/lib。

配置分詞,修改schema.xml配置,末尾增加如下:

    <fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">  
       <analyzer>  
       <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />  
       </analyzer>  
    </fieldtype>  
    <fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100">  
    <analyzer>  
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" />  
    </analyzer>  
    </fieldtype>  
    <fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100">  
    <analyzer>  
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" />  
    </analyzer>  
    </fieldtype>  

在 schema.xml中修改

     <field name="userAddress" type="textComplex" indexed="true" stored="false" multiValued="true"/>

重啓 solr

在query中進行測試

這裏寫圖片描述

說明中文支持成功!

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