zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    拷贝构造函数的参数为什么必须使用引用类型(避免无限递归拷贝,但其实编译器已经强制要求了)
    MAKE gnu
    设计模式之观察者模式(Observable与Observer)
    WCF从零学习之设计和实现服务协定2
    CLR_Via_C#学习笔记之枚举
    事件与动画
    Shell—学习之心得
    Asp.net MVC中提交集合对象,实现Model绑定
    一个23岁大学生的开源项目 谷歌要竖中指了
    C++中的虚函数总结
  • 原文地址:https://www.cnblogs.com/zhangyuan0532/p/6306936.html
Copyright © 2011-2022 走看看