什么是IK分词器? 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术" 会被分为"我","爱","技","术",这显然不符合要求,所以我们需要安装中文分词器IK来解决这个问题 IK提供了两个分词算法:ik_smart和ik_max_word 其中ik_smart为最少切分, ik_max_word为最细粒度划分 安装 IK: 同样下载不说直接安装.记得版本相同 ? 这种自己需要的词,需要自己加到字典中 IK分词器增加自己的配置: 我们找到IK的配置文件,位于ik/config/IKAnalyzer.cfg.xml ? ?
ik分词器出现的背景: 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作, 默认的中文分词是将每个字看成一个词 ,比如"中国的花"会被分为"中","国","的","花",这显然是不符合要求的,所以我们需要安装中文分词器ik来解决这个问题。 IK提供了两个分词算法 ik_smart 和 ik_max_word 其中 ik_smart 为最少切分,ik_max_word为最细粒度划分 我们分别来试一下 (1)最小切分:在浏览器地址栏输入地址 分词器支持自定义词库 默认的分词并没有识别“小明”是一个词。 步骤: (1)进入elasticsearch/plugins/ik/config目录 (2)新建一个my.dic文件,编辑内容: 小明 修改IKAnalyzer.cfg.xml(在ik/config
ES 的默认分词设置的是 standard,会单字拆分进行拆分。 图片POST _analyze{ "analyzer": "standard", "text": "我是中国人"}概述IKAnalyzer 是一个开源的,基于 Java 语言开发的轻量级的中文分词工具包 下载 Ik 分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases图片IKAnalyzer 两种分词模式ik_max_word 配置 IK将下载好的 zip 上传到 linux 当中,上传到之前新建的 plugins 目录当中,上传之前首先新建一个 ik 的文件夹然后上传到新建的 ik 文件夹当中:mkdir ik图片上传完毕之后利用 _analyze{ "analyzer": "ik_max_word", "text": "我是中国人啊了呢"}设置 IK 分词器作为默认分词器PUT /my_index{ "settings
IK分词器 什么是 IK 分词器 分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词 ,比如"我爱技术"会被分为"我","爱","技","术",这显然不符合要求,所以我们需要安装中文分词器IK来解决这个问题 IK提供了两个分词算法:ik_smart和ik_max_word 其中ik_smart 解压缩后拷贝到ElasticSearch的plugins文件夹下 创建 ik 目录 重启ES 之前是没有插件加载的 可以清晰的看到加载了 analysis-ik 也可以通过ES自带的工具查看 命令行执行 ElasticSearch-plugin list 进入Kibana测试 先测试 ik_smart 最少划分 GET _analyze { "analyzer": "ik_smart" , " 这种自己需要的词,需要自己加到字典中 IK分词器增加自己的配置 我们找到IK的配置文件, 位于ik/config/IKAnalyzer.cfg.xml IKAnalyzer.cfg.xml <?
IK分词器介绍 在elasticsearch 中查询数据,使用了默认的分词器,分词效果不太理想。 会把字段分成一个一个汉字,搜索时会把搜索到的句子进行分词,非常不智能,所以本次引入更为智能的IK分词器。 IK分词器提供两种分词算法 ik_smart和ik_max_word,ik_smar为最少切分,ik_max_word最精细度切分。 IK分词器测试 以”我爱你中国“为例, 默认的分词器会直接分为 "我" "爱" "你" "中" "国" 。 默认分词器 ? 自定义IK分词字典 以”我爱你中国“为例,自定义"爱你中国"组成一个分词。
/ 这里使用了腾讯云ElasticSearch服务,已默认集成了IK中文分词插件,因此安装过程略。 IK中文分词器就实现了上述的功能。 IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。 在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。 3. IK中文分词插件怎么使用 下面,我们创建一个新的集群,仍以上面的检索为例。使用IK后,重新检索。 ", ##指定索引内容使用ik_smart分词 "search_analyzer": "ik_smart" ##指定检索时,使用ik_smart
ElasticSearch7.6.x 模板及滚动索引创建及注意事项https://blog.csdn.net/a924382407/article/details/1150822652.ElasticSearch的IK 分词器https://blog.csdn.net/a924382407/article/details/1172555063.ElasticSearch核心概念:倒排索引https://blog.csdn.net
4 IK分词器 4.1 测试分词器 在添加文档时会进行分词,索引中存放的就是一个一个的词(term),当你去搜索时就是拿关键字去匹配词,最终找到词关联的文档。 会发现分词的效果将 “测试” 这个词拆分成两个单字“测”和“试”,这是因为当前索引库使用的分词器对中文就是单字 分词。 4.2 安装IK分词器 使用IK分词器可以实现对中文分词的效果。 下载IK分词器:(Github地址:https://github.com/medcl/elasticsearch-analysis-ik) 下载zip: ? 4.3 两种分词模式 ik分词器有两种分词模式:ik_max_word和ik_smart模式。 iK分词器自带一个main.dic的文件,此文件为词库文件。 ?
环境构建到此结束. 2、ik分词器安装部署 下载地址 注意es和ik分词器的版本匹配.这里下载8.2.3的ik分词器 下载完毕之后去es的工作目录的plugins文件夹下新建ik文件夹,将下载下来的ik 压缩包解压缩至ik文件夹下,重启es,集群中所有节点重复此操作. 3、ik 分词器简介 3.1 词库介绍 ik分词器主要有以下词库,位于config目录下 (1)、main.dic 主词库,包含日常生活中常用的词 -- <entry key="remote_ext_stopwords">words_location</entry> --> </properties> 主要用于扩展配置. 3.3 使用方式 ik分词器主要分为 GET test_index/_analyze { "tokenizer": "ik_max_word", "text": ["中华人民共和国"] } 分词结果如下: { "tokens ,很明显ik_max_word分的粒度更加的细和全面,所以一般都是用ik_max_word作为分词器. 3.4 扩展分词 一般情况下,词库是够用的,但是如果碰到一些特殊词汇如网络用词,这个时候就需要手动添加相关的词汇进入到词库中
各个版本都在这个地址下载,毕竟是github地址,有时进不去 https://github.com/medcl/elasticsearch-analysis-ik/releases
英文默认的standard分词器没有办法对中文进行合理分词的,只是将每个中文字符一个一个的切割开来,比如说中国人 --> 中 国 人 在搜索引擎领域,比较成熟和流行的,就是ik分词器 举个简单的例子: ---- ik分词器基础知识 ik有两种analyzer,可根据自己的需要自己选择,但是一般是选用ik_max_word ---- ik_max_word ik_max_word: 会将文本做最细粒度的拆分 ---- 验证ik分词器 新建个索引 PUT /artisan { "mappings": { "my_type": { "properties": { "text ": { "type": "text", "analyzer": "ik_max_word" } } } } } 查看分词 分词器 安装成功 。
1、安装IK分词器,下载对应版本的插件,elasticsearch-analysis-ik中文分词器的开发者一直进行维护的,对应着elasticsearch的版本,所以选择好自己的版本即可。 如我的elasticsearch-analysis-ik里面存的就是IK中文分词器解压缩后的文件。 切记,三个节点的plugins目录都要放IK中文分词器。 注意:text是分词,存储,建索引。analyzer指定创建索引的时候使用的分词器是IK中文分词器。 search_analyzer搜索的时候使用IK中文分词器。 指定中文分词器ik_max_word,-d后面是传参的。
一、概述 elasticsearch官方默认的分词插件,对中文分词效果不理想。 中文的分词器现在大家比较推荐的就是 IK分词器,当然也有些其它的比如 smartCN、HanLP。 这里只讲如何使用IK做为中文分词。 三、安装ik中文分词器 打开github地址:https://github.com/medcl/elasticsearch-analysis-ik 打开releases页面,下载7.10.1版本 ? 四、ik分词器的使用 简单示例 请求url: http://192.168.31.165:9200/_analyze 首先我们通过Postman发送GET请求查询分词效果 先指定Headers,Content-Type 热更新 IK 分词使用方法 目前该插件支持热更新 IK 分词,通过上文在 IK 配置文件中提到的如下配置 <!
1.从github中下载IK分词器,一定要注意和ES的版本一致 https://github.com/medcl/elasticsearch-analysis-ik/releases 2 .下载之后放到 plugins 目录下面去 重启 ES 服务 测试:http://localhost:9200/blog1/_analyze { "text":"中华人民共和国MN","tokenizer": "ik_max_word 和 ik_smart 什么区别? ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合 ,适合 Term Query; ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
所用IKAnalyzer:IK-Analyzer-2012FF 百度云:http://pan.baidu.com/s/1bne9UKf 实例代码: 1 package com.test.ik.analyzer word : stopList) { 51 System.out.println(word); 52 } 53 // DictionaryIK 分词器的词典对象 Dictionary.initial(configuration); 56 // getSingleton 获取初始化完毕的字典单例 57 // addWords 加载用户扩展的词汇列表到 IK reader); 66 CharTermAttribute term = ts.getAttribute(CharTermAttribute.class); 67 // 遍历分词数据 DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK
IK分词器的使用 首先我们通过Postman发送GET请求查询分词效果 GET http://localhost:9200/_analyze { "text":"农业银行" } 得到如下结果,可以发现 es的默认分词器无法识别中文中农业、银行这样的词汇,而是简单的将每个字拆完分为一个词,这显然不符合我们的使用要求。 /releases 下载与es对应版本的中文分词器。 仅仅可以得到每个字的分词结果,我们需要做的就是使分词器识别到弗雷尔卓德也是一个词语。 -- <entry key="remote_ext_stopwords">words_location</entry> --> </properties> 再次查询发现es的分词器可以识别到弗雷尔卓德词汇
1.中文分词器standard 分词器,仅适用于英文。 分词器就是目前最流行的 Elasticsearch 中文分词器2. -7.12.0/plugins/ik#解压unzip elasticsearch-analysis-ik-7.12.0.zip#重启es3.ik 分词器的使用两个重要的属性:ik_max_word: 一般,像停用词,会在分词的时候,直接被干掉,不会建立在倒排索引中5.自定义词库自己建立词库:每年都会涌现一些特殊的流行词,网红,蓝瘦香菇,喊麦,鬼畜,一般不会在 ik 的原生词典里自己补充自己的最新的词语 分词器原生支持的热更新方案,部署一个 web 服务器,提供一个 http 接口,通过 modified 和 tag 两个 http 响应头,来提供词语的热更新修改 ik 分词器源码,然后手动支持从 mysql
这里使用的是6.4.1版本对应的ik分词器,可以看到 配置文件中 ext_dict和ext_stopwords 默认是空的,如果需要的话,我们可以修改该配置项。 通常像停用词,会在分词的时候,直接被干掉,不会建立在倒排索引中 ) ---- IK自定义词库 自定义词库 有一些特殊的流行词,一般不会在ik的原生词典main.dic里。 这个时候,我们用ik的ik_max_word分词器来查下分词 GET _analyze { "text": ["盘他","杠精","脱粉"], "analyzer": "ik_max_word" 的 ik_max_word分词器还是将每个汉字作为一个term , 这个时候去使用这些词语去搜索,效果肯定不是很理想。 Step3 :重启es ,查看分词 重启es GET _analyze { "text": ["盘他","杠精","脱粉"], "analyzer": "ik_max_word" } 返回 {
-IK分词器配置文件+自定义词库 上面两篇学习了如何安装IK以及基本的使用,当我们使用自定义词库的时候,是不是每次都得重启,而且得逐个节点依次修改,是不是有点不方便呢? ik分词器原生支持的热更新方案,部署一个web服务器,提供一个http接口,通过modified和tag两个http响应头,来提供词语的热更新 推荐第一种方案修改ik分词器源码, 第二种方案ik git 使用 ik_max_word 来看下 IK的 对 “盘他”的分词 插入一条数据 INSERT INTO `hot_words` VALUES ('1', '盘他'); 查看es elasticsearch.log 的日志 可以看到加载成功,那重新来查看下分词 不会被IK分词了,成功。 可以看到“啥”已经不会被IK当做分词了,成功。
进行分词,让大家对 ElasticSearch 的全文搜索和 ik 中文分词原理有一个全面且深入的了解。 ElasticSearch 默认的分词器并不是处理中文分词的最优选择,目前业界主要使用 ik 进行中文分词。 ik 分词原理 ik 是目前较为主流的 ElasticSearch 开源中文分词组件,它内置了基础的中文词库和分词算法帮忙开发者快速构建中文分词和搜索功能,它还提供了扩展词库字典和远程字典等功能,方便开发者扩充网络新词或流行语 继承了 Tokenizer,用来提供中文分词的分词器,其 incrementToken 是 ElasticSearch 调用 ik 进行分词的入口函数。 但是有些场景,开发者希望只有 程序员、爱 和 编程 三个分词结果,这时就需要使用 ik 的 ik_smart 模式,也就是进行消除歧义处理。