(五)使用IK分词器、扩展ik词库和停词库
使用IK分词器
- 集成ik分词器 https://mp.csdn.net/postedit/93602713
- 实体类PosEntity
/** 省略了getter、setter*/ class PosEntity{private Integer posId;private String posName;private String posAddress;}
实体类中posName和posAddress都用作中文字段,使用IK分词器
创建索引
@Testpublic void createIKIndex(){XContentBuilder contentBuilder = null;try {contentBuilder = XContentFactory.jsonBuilder().startObject().startObject(typeName).startObject("properties").startObject("posId").field("type","integer").endObject().startObject("posName").field("type","text").field("analyzer","ik_max_word").endObject().startObject("posAddress").field("type","text").field("analyzer","ik_max_word").endObject().endObject().endObject().endObject();} catch (IOException e) {e.printStackTrace();}client.admin().indices().prepareCreate(ikIndexName).addMapping(typeName, contentBuilder).get();}
导入数据
@Testpublic void loadIKData(){PosEntity entity = new PosEntity(3, "渝B21902321", "中国是世界上人口最多的国家");PosEntity entity1 = new PosEntity(4, "渝A21902321", "今天是你的生日胖头鱼");client.prepareIndex(ikIndexName, typeName, "3").setSource(JSONObject.toJSONString(entity), XContentType.JSON).get();client.prepareIndex(ikIndexName, typeName, "4").setSource(JSONObject.toJSONString(entity1), XContentType.JSON).get();}
导入的有车牌号和正常的语句。分词情况可以在kibana中
GET _analyze{"text":"今天是你的生日胖子","analyzer":"ik_max_word"}
查看。
搜索操作跟前面类似
@Testpublic void multiIK(){MultiMatchQueryBuilder queryBuilder = new MultiMatchQueryBuilder("是你的", "posName", "posAddress");SearchRequestBuilder builder = client.prepareSearch(ikIndexName, typeName).setQuery(queryBuilder);execSearch(builder);}@Testpublic void ikStringQuery(){QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder("posAddress:是你的");SearchRequestBuilder builder = client.prepareSearch(ikIndexName, typeName).setQuery(queryStringQueryBuilder);execSearch(builder);}
扩展ik词库
- 先用kibana解析“蓝瘦香菇很好吃”这句话
GET _analyze{"text":"蓝瘦香菇很好吃","analyzer":"ik_max_word"}
结果如下
{"tokens": [{"token": "蓝","start_offset": 0,"end_offset": 1,"type": "CN_CHAR","position": 0},{"token": "瘦","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 1},{"token": "香菇","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 2},{"token": "很好","start_offset": 4,"end_offset": 6,"type": "CN_WORD","position": 3},{"token": "很","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 4},{"token": "好吃","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 5}] }
蓝瘦香菇被未被识别成一个词,,很被识别了。现在让蓝瘦香菇被识别为整体,很作为停词被忽略。
进入ik配置文件目录 /home/es/elasticsearch-6.2.2/plugins/ik/config,创建一个词典文件
vim my_extra.dic
添加蓝瘦香菇 ,保存修改
创建一个分词文件 ,添加很
vim my_extra.dic
修改IK配置文件,在添加自定义的文件
vim 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">my_extra.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">my_stopword.dic</entry><!--用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">words_location</entry> --><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
分别添加进自己扩展的词库文件和分词文件。
重启es集群
重新解析那句话,结果如下
{"tokens": [{"token": "蓝瘦香菇","start_offset": 0,"end_offset": 4,"type": "CN_WORD","position": 0},{"token": "瘦","start_offset": 1,"end_offset": 2,"type": "CN_CHAR","position": 1},{"token": "香菇","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 2},{"token": "很好","start_offset": 4,"end_offset": 6,"type": "CN_WORD","position": 3},{"token": "好吃","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 4}] }
(五)使用IK分词器、扩展ik词库和停词库相关推荐
- 安装Kibana、head、IK分词器后IK的使用
安装Kibana 1 什么是Kibana Kibana是ES提供的一个基于Node.js的管理控制台, 可以很容易实现高级的数据分析和可视化,以图标的形式展现出来. kibana可以用来编辑请求语句的 ...
- 腾讯云docker下安装elasticsearch及IK分词器-扩展词-停止词Kibana
1.拉取 docker pull elasticsearch:7.7.0 2.运行 docker run --name elasticsearch -d -e ES_JAVA_OPTS="- ...
- IK分词器扩展词典、停用词典、同义词典
1.扩展词典 扩展词:就是不想哪些词分开,让他们成为一个词,比如"哈利波特" 自定义扩展词库 进入到elasticsearch的conf/analysis-ik/目 ...
- JAVA开源中文分词器Ansj(依赖注入+调用方式+停词器)
Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词 ...
- Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新
文章目录 一.源码分析 1. 默认热更新 2. 热更新分析 3. 方法分析 二.词库热更新 2.1. 导入依赖 2.2. 数据库 2.3. JDBC 配置 2.4. 打包配置 2.5. 权限策略 2. ...
- IK分词器的安装和扩展词典的使用
Es中默认的是标准分词器,对于属性类型是text类型的中文语句,进行了单字分词,英文语句是单词分词. 所以在搜索时,如果输入单词搜索,拆分成多个汉字搜索,搜索内容不准确. 故引入更加智能的IK分词器. ...
- ik分词器的热词更新_ik与拼音分词器,拓展热词/停止词库
说明:本篇文章讲述elasticsearch分词器插件的安装,热词库停止词库的拓展,文章后面提到elasticsearch ,都是以es简称. 以下分词器的安装以ik分词器和pinyin分词器为例说明 ...
- Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)
Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...
- 单机版Solr的中文分词器solr IK下载和配置、拓展词典、停用词典
下载ik分词器 solr IK中文分词器下载地址 github地址下载(最新版本): https://github.com/magese/ik-analyzer-solr solr7版本的ik分词器: ...
最新文章
- OAuth 2.0中的scope和RBAC中的role有什么关系
- Safari下弹窗问题的解决办法
- C++手写a除以b的正余数
- Java“地铁”表(JavaFX)
- AlertDialog禁止返回键
- 字符串 读取西门子_【必学技能】自己动手——基于C#实现手机APP远程访问西门子PLC...
- 犯罪分子正在将合法的云监控工具用作后门
- Python排序算法[二]:测试数据的迷雾散去
- Samba 共享目录启动mysql
- 【刷算法】对称的二叉树
- Julia: 如何转换PyPlot的X轴的日期格式?
- 【语音分析】基于matlab线性预测系数对比【含Matlab源码 557期】
- Sql Server 2008R2 备份文件还原数据库
- java插桩-javaassist
- 手把手带你将电脑音乐同步到iPhone 音乐
- python集成Bartender的雏形
- 如何在线无痕去除图片水印
- Android电视直播 v5.6,龙龙直播app下载|龙龙直播apk2019官方版下载 v5.6.1 安卓版 - 数码资源网...
- 年薪50万的Python工程师曝光公司面试题
- Linux删除特殊名称文件或文件夹
热门文章
- 在linux + RTX3080上运行深度学习的经验
- android 5星,[android]市场满分5星游戏推荐:battleheart(勇者之心) | 古意人
- MYSQL学习与数据库综合实验(九)——触发器
- 对于MSB8036 找不到 Windows SDK 版本10.0.17763.0。请安装所需的版本的 Windows SDK的问题
- iOS中实现弹簧动画
- java调用wadl_java-ee – 如何从IntelliJ IDEA中的RESTful Java代码生成WADL?
- 机械加工行业MES解决方案,解决生产作业调度问题
- Portainer.io
- 建筑产业数字化进程提速 业内期盼国家战略出台
- selenium实现12306火车购票网站滑块自动验证登录