Solr动态加载分词器的自定义词库扩展词库解决方案

来源:互联网 发布:华美网络飞天侠 编辑:程序博客网 时间:2024/05/16 20:55

最近在做全文检索 在项目中有个需求是要动态的配置Solr的自定义扩展词库,在网上找了很多资料 发现关于这方面的知识比较少 千辛万苦终于找到了解决方案 在这里和大家分享一下

1.自行下载mmseg4j有关的Java包

# 适配SOLR6.2.1mmseg4j-core-1.10.0.jarmmseg4j-solr-2.3.0.jar

2.将下载好的Jar包放入webapps/solr/WEB-INF/lib下

3.修改managed-schema配置,添加如下内容

<!-- 中文分词mmseg4j --><fieldtype name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100">    <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="自定义词库路径" />        <!-- 停止词过滤器 -->        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />        <filter class="solr.LowerCaseFilterFactory"/>    </analyzer></fieldtype><fieldtype name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100">    <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="自定义词库路径" />         <!-- 停止词过滤器 -->        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />        <filter class="solr.LowerCaseFilterFactory"/>    </analyzer></fieldtype><fieldtype name="text_mmseg4j_maxWord" class="solr.TextField" positionIncrementGap="100">    <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="自定义词库路径" />        <!-- 停止词过滤器 -->        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />        <filter class="solr.LowerCaseFilterFactory"/>    </analyzer></fieldtype>

4.修改solrconfig.xml配置,添加如下内容

<requestHandler name="/mmseg4j/reloadwords" class="com.chenlb.mmseg4j.solr.MMseg4jHandler">    <lst name="defaults">        <str name="dicPath">自定义词库路径</str>        <str name="check">true</str>        <str name="reload">true</str>    </lst></requestHandler>

5.在自定义词库目录下放入词库
5.1: 在mmseg4j-core-1.10.0.jar中找到chars.dic, units.dic, words,dic放入自定义词库目录下 这三个都是官方词库,你可以更改以便覆盖官方配置, 也可以不更改.

5.2: 自定义词库可识别到文件名为words开头, .dic为文件结尾的UTF-8格式的文件.如在自定义词词库下创建words-my.dic。如果是带BOM的UTF8文件, 第一行为空即可. 每行一个词.

6.重新加载自定义词库
单机版访问http://localhost:8983/solr/CORE名称/mmseg4j/reloadwords 进行动态加载自定义词库

SolrCloud如果涉及到多个节点,则每个节点都要执行以下访问方可使所有节点都生效

http://节点1:8983/solr/CORE名称/mmseg4j/reloadwords

http://节点2:8983/solr/CORE名称/mmseg4j/reloadwords

http://节点3:8983/solr/CORE名称/mmseg4j/reloadwords

7.返回结果如下

<?xml version="1.0" encoding="UTF-8"?><response>    <lst name="responseHeader">        <int name="status">0</int>        <int name="QTime">1</int>    </lst>    <lst name="result">        <str name="dicPath">java.net.URI:file:自定义词库路径</str>        <bool name="changed">false</bool>    </lst></response>
1 0
原创粉丝点击