elasticsearch5.3.2同义词,热词,停止词

新公司的用的es5.3.2,版本偏老,业务中需要用到动态的同义词、热词、停止词,即不重启实现词典的更新,这里记录一下以免忘记。下载地址

elasticsearch5.3.2同义词,热词,停止词_第1张图片

 

1、首先需要知道,这里的同义词、热词、停止词,本质上都是对分词的一些定义和约束

2、通过第三方分词器插件实现中文的自定义分词,这里用到两种插件:

  • elasticsearch-analysis-ik:github地址,ik中文分词器,本身支持热词、停止词动态更新
  • elasticsearch-analysis-dynamic-synonym:github地址,动态同义词,依赖于第一种Ik中文分词器,作为其补充

ik中文分词器的版本比较全,下载自己对应的版本即可,但是动态同义词对应的releases版本不多,如果没有自己需要的版本可以下载版本最接近的一份源码,然后按照自己需要进行修改即可,对应插件的说明查看github即可

3、修改示例

  • 修改pom文件,把es的版本改为自己需要的,这里改为5.3.2
  • 修复源码报错,因为引入的es客户端版本不同导致的,一般是接口不同报的错,简单修复下即可,其他逻辑基本相同不需要大规模修改
  • 词典动态更新依赖于自己搭建的远端服务,需要head/get两种请求,其中head请求只用于获取head头来判断词典是否更新,get请求才真正获取词典数据,我这里提供的文件将head/get改为了get/post,如有其他需求请自行修改
  • 远程词典的更新都是定时进行拉取的,但是ik中文分词器不支持时间间隔的配置,可以自行添加这个配置
  • 修改完成后执行maven命令:mvn clean package即可,我们最终需要的是target中的zip压缩包,然后把zip解压到es安装路径/plugins/dynamic-synonym中即可

4、配置使用方式略,已放在文件中

5、注意新的词典或者说新的分词规则不会影响现有数据,只对新增/修改的数据才有效,如需对老数据更新,建议使用重索引的方式,其实es最佳的使用方式是使用别名,而不是直接使用索引名称,当我们需要对索引mapping进行比如字段类型修改、添加新的分词规则(词典)时,我们只需要重新创建一个新的索引,然后使用重索引或自己同步的方式将数据迁移到新索引,最后将别名重新指向新索引即可,这样即简便也非常安全,如果出错了只需要将别名重新指向回去即可,不会影响使用

6、提供一下5.3.2的同义词、热词、停止词配置资料,里面除了插件源码,也提供了一个词典服务端的示例代码,下载地址

你可能感兴趣的:(elasticsearch5.3.2同义词,热词,停止词)