低版本solr不重启服务动态加载词库增量分词

2 篇文章 0 订阅
1 篇文章 0 订阅

需求背景:系统热点词不断变化,需要solr动态加载词库里的分词,具体场景是cms系统维护热点词,solr去pull变化的分词,然后通过技术手段将分词reload到solr且不重启solr服务器。主要要点

1 通过cms系统维护热点词的维护 

2 cms和solr不在同一台服务器上,需要通过shell脚本调用增量变化的分词接口,并将变化结果直接pull到自定义词库字典

3 通过mmseg4j中文分词器reload字典表重建solr字段索引

步骤一二涉及到业务,笔者就在此不做赘述,直接步骤三

①  下载适配mmseg4j分词器jar包
mmseg4j-core-1.10.0.jar
mmseg4j-solr-2.3.0.jar

maven pom依赖

<dependency>
   <groupId>com.chenlb.mmseg4j</groupId>
   <artifactId>mmseg4j-solr</artifactId>
   <version>2.3.0</version>
</dependency>
<dependency>
   <groupId>com.chenlb.mmseg4j</groupId>
   <artifactId>mmseg4j-core</artifactId>
   <version>1.10.0</version>
</dependency>

可以根据solr版本具体版本进行调整,笔者用的是solr5.3.0,

将下载好的Jar包放入Tomcat下的/WEB-INF/lib下

② 修改managed-schema配置,添加如下内容,dicPath可以根据自己的路径进行更改

<!-- 中文分词mmseg4j -->
<fieldtype name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="E:\solr\WEB-INF\classes" />
        <!-- 停止词过滤器 -->
        <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="E:\solr\WEB-INF\classes" /> 
        <!-- 停止词过滤器 -->
        <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="E:\solr\WEB-INF\classes" />
        <!-- 停止词过滤器 -->
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldtype>

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

<requestHandler name="/mmseg4j/reloadwords" class="com.chenlb.mmseg4j.solr.MMseg4jHandler">
    <lst name="defaults">
        <str name="dicPath">E:\solr\WEB-INF\classes</str>
        <str name="check">true</str>
        <str name="reload">true</str>
    </lst>
</requestHandler>

④创建自定义词库文件,放入词库目录E:\solr\WEB-INF\classes

mmseg4j分词默认读取words开头的文件名,笔者建的是words_hot.dic文件

调用步骤二的接口,保证词库的结果更新到了自定义词库words_hot.dic文件里,然后重新加载自定义词库

笔者调用接口:http://127.0.0.1:8085/solr_war_exploded/my_solr/mmseg4j/reloadwords

返回结果:

<?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:E:\solr\WEB-INF\classes</str>
        <bool name="changed">true</bool>

        <bool name="reload">true</bool>
    </lst>
</response>

当为true时,说明词库已经自动reload了,不需要重启solr服务器即已经进行了索引重建。

<field name="hotSearch" type="text_mmseg4j_complex" indexed="true" stored="true"/>

然后使用自定义的分词器text_mmseg4j_simple后,发现目标实现,done!!圆满完成

大致等15分钟左右solr会自动重建索引,然后调solr接口即可将增量的热点词语显示出来

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力终会有回报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值