solr 7.0 tomcat 安裝配置 + 中文分詞

美式不加糖_發表於2017-12-08

title: solr 7.0 tomcat 安裝配置 + 中文分詞

author: Eric liu

tags: [solr,引擎,搜尋] categories:

  • solr
  • 搜尋

專案背景:

Solr 搜尋引擎與db的區別

solr:相關度排序,而不是某列 某些列
實現:倒排索引
MapReduce的誕生是為了構建web規模的倒排索引
多核:資料分割槽,多租客應用
複製程式碼

實踐

單機 部署到tomcat (手動) tomcat 要使用8才可以

步驟:
1.  解壓solr ,把 solr\solr-6.3.0\server\solr-webapp下的 webapp 資料夾拷貝到tomcat 的webapps下,重新命名為solr,也可以是其他名字(我定義的是lsearch);

  ( 注意,此處有的教程錯誤的將solr-webapp資料夾進行拷貝,這會導致solr啟動不了)

2. 拷貝solr-6.3.0\server\lib\ext 下的jar包到 tomcat\webapps\ 下solr 專案的WEB-INF\lib下;拷貝solr-6.3.0\dist 下solr-dataimporthandler jar 包,solr-dataimporthandler-extras-6.3.0.jar 包 到 tomcat\webapps\ 下solr 專案的WEB-INF\lib下

3. 拷貝solr-6.3.0\server 下的solr資料夾到E盤或其它非中文目錄下,重新命名為solrhome;

4. 修改tomcat\webapps\ solr(solr的專案名)\WEB-INF\web.xml, 找到如下程式碼,去掉註釋,/put/your/solr/home/here 改為你自己的solrhome的路徑,         如:E:/solr-home

<env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>E:/solr-home</env-entry-value>
       <env-entry-type>Java.lang.String</env-entry-type>
    </env-entry>

5. 拷貝solr-6.3.0\server\resources下的log4j.properties到tomcat\webapps\solr\WEB-INF\classes,如果WEB-INF下沒有classes檔案那麼就建立一個classes資料夾。

6.訪問:http://localhost:8888/lsearch/index.html
在tomcat的conf下的server.xml 中的8080 換成自己想要的埠號
lsearch為自定義的名字
複製程式碼

1.進不去:404

web.xml 中的
<security-constraint> 注掉
複製程式碼

2.檢視log

嚴重: Exception starting filter SolrRequestFilter
java.lang.NoClassDefFoundError: com/codahale/metrics/MetricSet
複製程式碼

解決辦法

請把solr-6.4.1/server/lib下的metrics-core-3.1.2.jar,metrics-ganglia-3.1.2.jar,metrics-graphite-3.1.2.jar,metrics-jetty9-3.1.2.jar,metrics-jvm-3.1.2.jar這幾個jar包放到tomcat下的solr專案的WEB-INF/lib目錄下。
複製程式碼

啟動介面如圖

新增core:

1.在solr_home 下新建資料夾

​ 複製 server/solr/ 預設下面的conf 到新建的core下面 。在 conf 同級新增core.properties 裡面name=新建的core名字。如 name=demo_engine

索引位置的說明

core.properties 中 name 寫core的名字
dataDir=/home/q/qsearch-index/ugc_engine   dataDir指定 索引放置的位置,如果不指定,索引會在同級目錄建立data目錄
如
name=demo_engine
dataDir=/Users/ly/Documents/code/demo-project/solr-index/demo_engine    自己創立的新資料夾+core名字
複製程式碼

錯誤1

 錯誤1:java.io.FileNotFoundException: /solr.log
 解決:
webapp/classes/lo4j中的 solr.dir 改為本地路徑。如

solr.log=/Users/ly/Documents/code/demo-project/tomcat-solr/logs/

複製程式碼

中文分詞

這裡選用ik 6.5,正常使用沒問題,可以自己開發分詞器

下載連結:http://files.cnblogs.com/files/wander1129/ikanalyzer-solr6.5.zip
複製程式碼

說明:


    ext.dic為擴充套件字典
    stopword.dic為停止詞字典
    IKAnalyzer.cfg.xml為配置檔案

    solr-analyzer-ik-5.1.0.jar ik-analyzer-solr5-5.x.jar為分詞jar包。

    1:將IK分詞器 JAR 包拷貝到lsearch/webapp/WEB-INF/lib/

    2:將詞典 配置檔案拷貝到 solr7/server/solr_webapp/webapp/WEB-INF/

    3: 更改test_core\conf\managed-schema配置檔案

複製程式碼

在schema中新增ik的 fieldType 如

<fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
        </analyzer>
     <analyzer type="query">
      <tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
        </analyzer>
</fieldType>
複製程式碼

這個fieldType 可以自己設定,指定tokenizer ,新增filter等,達到自己想要的效果

安裝好了之後重啟,

​ 測試:

​ (1)選擇 demo_engine (自定義的core)

​ (2)analysis,用來測試 fieldType的效果。使用solr的神器

這個是 useSmart的效果

ik分詞器

不加useSmart的效果

拼音分詞

自己實現了拼音轉化,在java端,存入欄位,用ngram 可以實現 字首/部分匹配的效果


Solo 7 與solr4的一些差異

一些基礎欄位,如int date 都變為pint pdate,之前 的schema 需要注意加一下fieldType


更新資料,資料庫 ,json 都可以,百度之。這裡 提供我的測試schema 和測試資料,用json update,需要在solrConfig中開啟

需要吧下面的 功能註釋去掉

  <requestHandler name="/update/json" class="solr.UpdateRequestHandler">
        <lst name="invariants">
         <str name="stream.contentType">application/json</str>
       </lst>
  </requestHandler>
複製程式碼

修改了schema 和 solrConfig的配置檔案需要重啟solr

測試資料的更新;

post 方式,content-Type:text/json 然後body中新增 測試資料的檔案就可以,這裡推薦使用chrome 的 postman外掛 比較好用

Url:

http://localhost:8888/lsearch/demo_engine/update/json?commit=true
複製程式碼

機器名+埠+介面+core的名字+。。。。

相關文章