docker環境下solr6.0配置(中文分詞+拼音)


前言:這篇文章是基於之前的“linux環境下配置solr5.3詳細步驟”(http://www.cnblogs.com/zhangyuan0532/p/4826740.html)進行擴展的。本篇的步驟是后來記錄的,所以沒有細節的命令代碼,也沒有截圖,諒解。

原先是solr5.3部署在linux環境下,本篇是solr6.0部署在docker環境下。大概是半年前2016年8月進行配置的,solr現在有小版本變化。

 

 

一、docker創建鏡像和容器

由於dockerfile里默認用戶為“solr",從宿主機拷入到容器內的文件無法設置讀寫編輯權限。因此我把dockerfile修改去除了“ENV  SOLR_USER solr”等用戶相關配置,默認使用root用戶。

1、下載solr6.0.1版的Dockerfile文件(共三個文件:Dockerfile、scripts/docker-entrypoint.sh、scripts/wait-for-solr.sh)
2、修改Dockerfile,去除solruser的信息
3、cd到Dockerfile所在目錄(/home/zhangyuan/docker-solr/6.0),執行build命令,生成鏡像(會等待很久
$ docker build -t solr .(注意owner和權限)
4、執行run命令,啟動容器
mkdir -p /home/docker/solr/qdfs
$ docker run --name qdsolr -d -p 8983:8983 -v /home/docker/solr/qdfs:/home/docker/solr/qdfs solr:latest
5)進入容器內修改/opt/solr/bin/solr.in.sh文件,SOLR_HEAP="4096m"

 

二、ik分詞器配置

1、ik分詞器的jar包(此jar包為配置solr5.3時使用的那一套)存放在solr_analyzer目錄下,jar包列表如下:
IKAnalyzer-5.0.jar
solr-analyzer-ik-5.1.0.jar
pinyin4j-2.5.0.jar
analyzer-pinyin-lucene-5.1.0.jar
analyzer-pinyin-solr-5.1.0.jar

2、從宿主機向docker容器內拷貝文件(solr_analyzer下所有文件拷入容器內/opt/solr/server/solr-webapp/webapp/WEB-INF/lib目錄下)
$ docker cp /home/docker/solr/solr_analyzer/. qdsolr:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib

3、ik分詞器需要ext.dic(字典) stopword.dic(排除詞) IKAnalyzer.cfg.xml(配置)的幾個文件連同文件夾拷入WEB-INF下(編輯IKAnalyzer.cfg.xml中ext.dic的注釋放開)
$ docker cp /home/docker/solr/classes qdsolr:/opt/solr/server/solr-webapp/webapp/WEB-INF

4、提交容器的修改到鏡像,並命名鏡像為solr:chinese

 

 

三、配置solr實例

1、將實例的core拷一個到solrhome,並命名為自己的名字(我的叫qdfs)
$ cp -r /opt/solr/example/example-DIH/solr/solr /opt/solr/server/solr/qdfs
2、修改solrconfig.xml文件,配置實例需要的jar包
大概在86行,添加分詞需要的jar
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-\d.*\.jar" />
3、修改managed-schema文件(6.0之前版本為schema.xml文件)
修改field信息為與自己的實體類相同的樣子(添加field、添加copyField)
添加IK分詞器配置,在文檔最后面添加如下(意思為text_ik類型字段進行索引時使用ik分詞器,並且進行拼音分詞,進行查詢時只使用ik進行中文分詞)
<!--IK-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/>
<filter class="org.apache.lucene.analysis.pinyin.solr5.PinyinTokenFilterFactory" firstChar="false" minTermLength="2" />
<filter class="org.apache.lucene.analysis.pinyin.solr5.PinyinNGramTokenFilterFactory" nGramChinese="false" nGramNumber="false" />

</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="false"/>
</analyzer>
</fieldType>

4、將實例文件夾(qdfs)拷貝到qdsolr容器附加卷目錄(/home/docker/solr/qdfs)下

 

四、啟動容器

1、啟動solr:chinese,同時設置端口、運行內存、附加文件夾
$ docker run --name qd-solr --restart=always -d -p 8983:8983 -m 4096m -v /home/docker/solr/qdfs:/opt/solr/server/solr/qdfs solr:chinese

2、訪問localhost:8983/solr進行查看測試

 

五、其他配置(可選)

solrConfig.xml文件中可進行下述修改

1、修改自動提交
(solr中數據索引后需要commit才能真正持久保存,我最早使用代碼進行主動commit,后來發現太慢,改為使用autoCommit)
autoCommit分兩類,一個是真正commit索引數據存入文件,慢但是安全,一個是軟commit索引數據存入內存或臨時文件,快但是不安全。調整配置的數據取到一個平衡點可以有效提高效率。

#1萬條或者5分鍾提交一次,關閉重新打開searcher(提高commit速度),1分鍾軟提交一次

<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>300000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>

<autoSoftCommit>
<maxTime>60000</maxTime>
</autoSoftCommit>

2、修改提交限制

和autoCommit配合使用,防止大量數據批量導入時內存溢出或者操作超時。
#50M數據或者1000個最大緩存個數
<ramBufferSizeMB>50</ramBufferSizeMB>
<maxBufferedDocs>1000</maxBufferedDocs>


3、最大可啟動searcher

solr每次提交時,都會新打開一個searcher,打開searcher需要花費一定時間,在這個過程中,如果又有新的commit提交,又會打開新的searcher。當數量超過SolrConfig.xml中配置的maxWarmingSearchers時,會報錯。
maxWarmingSearchers配置的是同時可以存在的searcher個數。

#由2改為4
<maxWarmingSearchers>4</maxWarmingSearchers>

 


免責聲明!

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



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