solr hanlp配置动态加载自定义词库

solr hanlp配置动态加载自定义词库

Hanlp提供了动态刷新自定义词库的接口

/**
     * 热更新(重新加载)<br>
     * 集群环境(或其他IOAdapter)需要自行删除缓存文件(路径 = HanLP.Config.CustomDictionaryPath[0] + Predefine.BIN_EXT)
     *
     * @return 是否加载成功
     */
    public boolean reload()
    {
          
   
        if (path == null || path.length == 0) return false;
        IOUtil.deleteFile(path[0] + Predefine.BIN_EXT); // 删掉缓存
        return loadMainDictionary(path[0]);
    }
}

或者在这下载()

2、在dictinoary里新增一个类

package com.hankcs.hanlp.dictionary;

import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.util.plugin.SolrCoreAware;

/**
 * @author:pxt
 * @create: 2022-11-02 13:25
 * @Description:用于接收solr请求调用reload
 */
public class DynamicCustom extends RequestHandlerBase implements SolrCoreAware {
          
   

    private SolrResourceLoader loader = null;

    @Override
    public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
          
   
       CustomDictionary.reload();
    }

    @Override
    public String getDescription() {
          
   
        return "";
    }

    @Override
    public void inform(SolrCore solrCore) {
          
   
        loader = solrCore.getResourceLoader();
    }
}

附上增加的solr依赖

<dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-core</artifactId>
            <version>6.0.0</version>
        </dependency>

做完上边步骤后即可打包将hanlp.jar 上传到服务器lib中

4、接下来配置solr

在solrconfig.xml中添加如下代码

<requestHandler name="/HanlpHandler/reloadwords" class="com.hankcs.hanlp.dictionary.DynamicCustom">
    <lst name="defaults">
    </lst>
</requestHandler>

配置完之后重启solr服务器,在更改自定义词库后访问地址http://ip:8080/solr/new_core/HanlpHandler/reloadwords 即可刷新自定义词库。若不成功尝试先删除.bin文件再刷新。

经验分享 程序员 微信小程序 职场和发展