Solr6 +mmseg4j+IK-Analyzer + SQLserver +DIH 完全配置


如今做任何一個系統都有搜索,而搜索界有著名的三劍客: solr/elasticsearch/sphinx

solr/elasticsearch 為同一類的,都是基於lucene開發的產品,本人也早在幾年前用過solr做過類似中關村的產品搜索,faceting功能非常好用.

近期手頭上又有個項目要搭建搜索,由於幾年沒摸過Solr,如今再次打開官網已覺得很陌生,不僅主頁換漂亮了,版本更是到了6.1 ,還有了 solr cloud的概念!!

廢話不多說,首先來介紹下環境配置:

1. 去 http://www.apache.org/dyn/closer.lua/lucene/solr/6.1.0  下載zip,解壓放到你想放的位置, 我放到了E盤根目錄

2. 設置環境變量PATH: E:\solr-6.1.0\bin , 這是為了方便在命令行里面可以直接找到 solr 命令

3. 任意位置創建一個目錄,該目錄包含以下內容

   1). IK+mmseg4j的字典

   2).sqlserver jdbc 驅動

   3).最新版的 ik+mmseg4j 的 jar包

然后在目錄下創建一個 1.start-solr.cmd (你喜歡的名字),內容如下:

solr start -h localhost -p 58983 -m 1g -s "%~dp0solr_home" -noprompt -V

  雙擊運行(如果目錄是需要管理員權限的, 有可能需要管理方式運行)

 

下面來說說具體配置

solrconfig.xml (\solr_home\products\conf\solrconfig.xml)

該配置文件是放到core里面的,我新建一個products的core

把所有依賴的jar包配置進去

<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
 <!--同時兼容mmseg4j+ik中文分詞器-->
  <lib dir="${solr.solr.home}/../tokenizers/mmseg4j" regex=".*\.jar" />
  <lib dir="${solr.solr.home}/../tokenizers/IK-Analyzer" regex=".*\.jar" />
  <lib dir="${solr.solr.home}/../sqlserver-jdbc" regex=".*\.jar" />

 

啟用DIH,這里要注意這個功能依賴上面的  solr-dataimporthandler-xx.jar 配置

<!--啟用DIH數據導入-->
  <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
  </requestHandler>

 

以下是solr6里面,如果要手動修改schame.xml配置時要替換的,詳見注釋鏈接

<!-- 這里需要配置這個,https://cwiki.apache.org/confluence/display/solr/Schema+Factory+Definition+in+SolrConfig -->
<schemaFactory class="ClassicIndexSchemaFactory"/>

 

schema.xml 配置

<!--以下定義中文分詞器及各自的詞典配置-->
  <fieldtype name="mmseg4jComplex" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex"  dicPath="${solr.solr.home:}/../dict/mmseg4j" />
    </analyzer>
  </fieldtype>
  <fieldtype name="mmseg4jMaxWord" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word"  dicPath="${solr.solr.home:}/../dict/mmseg4j"  />
    </analyzer>
  </fieldtype>
  <fieldtype name="mmseg4jSimple" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple"  dicPath="${solr.solr.home:}/../dict/mmseg4j" />
    </analyzer>
  </fieldtype>

  <fieldType name="text_ik" class="solr.TextField">
    <!--索引時候的分詞器-->
    <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="true"/>
    </analyzer>
    <!--查詢時候的分詞器-->
    <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="false"/>
    </analyzer>
  </fieldType>

 

 

db-data-config.xml

<dataConfig>
  <dataSource type="JdbcDataSource"
          driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
          url="jdbc:sqlserver://127.0.0.1:1433;databaseName=xxdb;"
          user="dev"
          password="111111"
          batchSize="100" />
  <document>
    <entity name="product" query="select [id],[name],[brief],[description] from [products]"
            deltaQuery="select id from [products] where [lastmodificationtime] > '${dataimporter.last_index_time}'">
      <field column="name" name="name" />
      <field column="brief" name="brief" />
      <field column="description" name="description" />
    </entity>
  </document>
</dataConfig>

 

以上配置內包含的路徑均沒有寫死, 使用的占位符, 可用的占位符可以在 solr admin ui 的 dashboard JVM 欄看到

 

!!!!!!!!!!!!!!!!!前方高能!!!!!!附件說明!!!!!!!!!!

點我下載附件,雙擊運行,如有報錯,歡迎來噴(^_^)!

(一定要先配置PATH環境變量后再雙擊)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM