千家信息网

elasticsearch 中如何使用IK-Analyze中文分词插件

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,elasticsearch 中如何使用IK-Analyze中文分词插件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装
千家信息网最后更新 2025年01月24日elasticsearch 中如何使用IK-Analyze中文分词插件

elasticsearch 中如何使用IK-Analyze中文分词插件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


安装中文分词插件

插件对应的版本需要和elasticsearch的版本一致

插件各个版本下载地址

https://github.com/medcl/elasticsearch-analysis-ik/releases

使用elasticsearch自带脚本进行安装

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip

插件jar包安装在elasticsearch-7.3.0/plugins/analysis-ik下

插件的配置文件存放在elasticsearch-7.3.0/config/analysis-ik下,在此目录中存放了许多词库,如果我们想根据自己业务去扩展一些自定义词库的话,可以修改此目录中的 IKAnalyzer.cfg.xml 文件

例如:

        IK Analyzer 扩展配置                custom/mydict.dic;                 custom/ext_stopword.dic                http://10.0.11.1:10002/elasticsearch/myDict                http://10.0.11.1:10002/elasticsearch/stopWordDict

扩展词库可以配置在本地或存放在远程服务器上

custorm存放在IKAnalyzer.cfg.xml 文件所在目录中,需要注意的是扩展词典的文本格式为 UTF8 编码

配置在远程词库中更新词库后不需要重启,需要在http请求头中做些设置

  1. 该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。

  2. 该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

修改完IKAnalyzer.cfg.xml需要重启服务

// 创建索引PUT /full_text_test// 添加mappingPOST /full_text_test/_mapping{  "properties":{    "content":{      "type":"text",      "analyzer":"ik_max_word",      "search_analyzer":"ik_smart"    }  }}// 添加一条数据POST /full_text_test/_doc/1{  "content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}

测试分词效果

ik_max_word: 会将文本做最细粒度的拆分

ik_smart: 会做最粗粒度的拆分

POST /full_text_test/_analyze{  "text": ["中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"],  "tokenizer": "ik_max_word"}结果{  "tokens" : [    {      "token" : "中国",      "start_offset" : 0,      "end_offset" : 2,      "type" : "CN_WORD",      "position" : 0    },    {      "token" : "驻",      "start_offset" : 2,      "end_offset" : 3,      "type" : "CN_CHAR",      "position" : 1    },    {      "token" : "洛杉矶",      "start_offset" : 3,      "end_offset" : 6,      "type" : "CN_WORD",      "position" : 2    },    {      "token" : "领事馆",      "start_offset" : 6,      "end_offset" : 9,      "type" : "CN_WORD",      "position" : 3    },    {      "token" : "领事",      "start_offset" : 6,      "end_offset" : 8,      "type" : "CN_WORD",      "position" : 4    },    {      "token" : "馆",      "start_offset" : 8,      "end_offset" : 9,      "type" : "CN_CHAR",      "position" : 5    },    {      "token" : "遭",      "start_offset" : 9,      "end_offset" : 10,      "type" : "CN_CHAR",      "position" : 6    },    {      "token" : "亚裔",      "start_offset" : 10,      "end_offset" : 12,      "type" : "CN_WORD",      "position" : 7    },    {      "token" : "男子",      "start_offset" : 12,      "end_offset" : 14,      "type" : "CN_WORD",      "position" : 8    },    {      "token" : "子枪",      "start_offset" : 13,      "end_offset" : 15,      "type" : "CN_WORD",      "position" : 9    },    {      "token" : "枪击",      "start_offset" : 14,      "end_offset" : 16,      "type" : "CN_WORD",      "position" : 10    },    {      "token" : "嫌犯",      "start_offset" : 17,      "end_offset" : 19,      "type" : "CN_WORD",      "position" : 11    },    {      "token" : "已",      "start_offset" : 19,      "end_offset" : 20,      "type" : "CN_CHAR",      "position" : 12    },    {      "token" : "自首",      "start_offset" : 20,      "end_offset" : 22,      "type" : "CN_WORD",      "position" : 13    }  ]}
POST /full_text_test/_analyze{  "text": ["中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"],  "tokenizer": "ik_smart"}结果{  "tokens" : [    {      "token" : "中国",      "start_offset" : 0,      "end_offset" : 2,      "type" : "CN_WORD",      "position" : 0    },    {      "token" : "驻",      "start_offset" : 2,      "end_offset" : 3,      "type" : "CN_CHAR",      "position" : 1    },    {      "token" : "洛杉矶",      "start_offset" : 3,      "end_offset" : 6,      "type" : "CN_WORD",      "position" : 2    },    {      "token" : "领事馆",      "start_offset" : 6,      "end_offset" : 9,      "type" : "CN_WORD",      "position" : 3    },    {      "token" : "遭",      "start_offset" : 9,      "end_offset" : 10,      "type" : "CN_CHAR",      "position" : 4    },    {      "token" : "亚裔",      "start_offset" : 10,      "end_offset" : 12,      "type" : "CN_WORD",      "position" : 5    },    {      "token" : "男子",      "start_offset" : 12,      "end_offset" : 14,      "type" : "CN_WORD",      "position" : 6    },    {      "token" : "枪击",      "start_offset" : 14,      "end_offset" : 16,      "type" : "CN_WORD",      "position" : 7    },    {      "token" : "嫌犯",      "start_offset" : 17,      "end_offset" : 19,      "type" : "CN_WORD",      "position" : 8    },    {      "token" : "已",      "start_offset" : 19,      "end_offset" : 20,      "type" : "CN_CHAR",      "position" : 9    },    {      "token" : "自首",      "start_offset" : 20,      "end_offset" : 22,      "type" : "CN_WORD",      "position" : 10    }  ]}

实现一个可以从数据库管理的词库表,方便随时扩展词库

/** * elasticsearch ik-analysis 远程词库 * 1、该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag, * 这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。 * 2、该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。 */@RequestMapping("myDict")public String myDict(HttpServletResponse response) {    // 从数据库中查询当前version        String version = esDictVersionMapper.selectById(1).getVersion();    // 设置请求头中的词库版本号        response.setHeader("Last-Modified", version);        StringBuilder sb = new StringBuilder();    // 查出mysql中扩展词库表中所有数据,并以\n分隔        esDictMapper.selectList(null).forEach(item -> sb.append(item.getWord()).append("\n"));        return sb.toString();}

常见问题
问题1:"analyzer [ik_max_word] not found for field [content]"
解决办法:在所有es节点安装IK后,问题解决。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

词库 插件 领事 亚裔 嫌犯 男子 领事馆 中国 洛杉矶 枪击 数据 版本 配置 内容 文件 格式 目录 问题 更新 中文 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 方舟修改器非专用服务器用不了 获取数据库所有表sql 财政网络安全承诺书 浦东新区电商软件开发服务价钱 广德智能软件开发服务是什么 设计企业审批管控软件开发平台 软件开发生意好做吗 重庆考警校网络安全要多少分 新华三杯网络技术大赛题库 配置型管理软件开发平台 mysql数据库表格模板 软件工程师的软件开发 利好政策促网络安全 上海wind金融数据库 平台软件开发团队成员分工 永济软件开发系统 星脉网络技术有限公司怎么样 神木国家网络安全宣传 为什么企业不用微软数据库 未来网络技术创新的趋势 服务器管理器中显示没有激活 联想a936手机连接服务器 自动启数据库表名 幼儿园网络安全保护措施 传感器网络技术难点 战略领域芯片软件网络安全 永济软件开发系统 长丰网络技术咨询 社区网络安全工作计划方案 社区网络安全宣传普及活动
0