欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

elasticsearch中文分词器插件elasticsearch-analysis-ik远程自定义词典热更新

程序员文章站 2024-02-22 11:50:40
...

IK简介

IK分词器基于词库进行分词,analysis-ik内置了一些词典:主词典main.dic、姓氏词典surname.dic、量词词典quantifier.dic、后缀词典suffix.dic、介词词典preposition.dic、停词词典stopword.dic。除此之外还可以通过配置文件IKAnalyzer.cfg.xml对词库进行扩展。

analysis-ik依次从如下两个位置尝试加载IKAnalyzer.cfg.xml:

1.elasticsearch配置文件所在目录的analysis-ik目录下。

2.analysis-ik插件所在目录的config目录下。

如果两个位置均未找到会抛出FileNotFoundException异常。analysis-ik内置词典与IKAnalyzer.cfg.xml放在相同的目录中;如果没有IKAnalyzer.cfg.xml文件,则放置在上述目录2中。找不到内置词典时同样会抛出FileNotFoundException异常。

IKAnalyzer.cfg.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

其中配置项ext_dict和ext_stopwords的值为分号分隔的本地词典路径列表,词典路径是相对于配置文件IKAnalyzer.cfg.xml所在目录的相对路径。配置项remote_ext_dict和remote_ext_stopwords的值为分号分隔的远程词典http地址列表。

远程词典

加载词典

向配置的词典地址发送GET请求,返回内容为每行一个词的词列表。

热更新

向配置的词典地址发送HEAD请求,返回的响应头包括Last-Modified和(或)ETag,两者皆为字符串,当其中任何一个发生改变时,analysis-ik都会发送GET请求重新加载词典。

满足以上两个条件就可以在不重启elasticsearch的情况下热更新词典,当然首次更新完配置后还是需要重启一次elasticsearch的。还有一点需要额外说明的是,无论是远程扩展词典还是远程扩展停词词典发生变化,每次重新加载词典时都会将两者全部重新加载。