ik中文分词useSmart的使用及生效

合集下载

IK-Analyzer(5.3.1)动态配置自定义词典

IK-Analyzer(5.3.1)动态配置自定义词典

IK-Analyzer(5.3.1)动态配置⾃定义词典jar包:IK-Analyzer-extra-5.3.1.jarIKAnalyzer5.3.1.jarlucene-core-5.3.1.jarlucene-analyzers-common-5.3.1.jar⼀、创建类⾃⼰的分词器配置类并实现IK-Analyzer分词器的配置接⼝:值得注意的⼀点是:我们在指定配置⽂件时候,要指定我们⾃⼰的配置⽂件。

如果不指定路径默认会视作IKAnalyzer5.3.1.jar⾥⾯的IKAnalyzer.cfg.xmlimport java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.InvalidPropertiesFormatException;import java.util.List;import java.util.Properties;import ng.StringUtils;import org.wltea.analyzer.cfg.Configuration;public class MyConfiguration implements Configuration {// 懒汉单例private static final Configuration CFG = new MyConfiguration();/** 分词器默认字典路径*/private String PATH_DIC_MAIN = "org/wltea/analyzer/dic/main2012.dic";// 需要把static final去掉private static final String PATH_DIC_QUANTIFIER = "org/wltea/analyzer/dic/quantifier.dic";/** 分词器配置⽂件路径*/private static final String FILE_NAME = "com/unruly/test/IKAnalyzer.cfg.xml";// 指定我们⾃⼰的分词器配置⽂件// 配置属性——扩展字典private static final String EXT_DICT = "ext_dict";// 配置属性——扩展停⽌词典private static final String EXT_STOP = "ext_stopwords";private Properties props;/** 是否使⽤smart⽅式分词*/private boolean useSmart;/*** 返回单例** @return Configuration单例*/public static Configuration getInstance() {return CFG;}/** 初始化配置⽂件*/MyConfiguration() {props = new Properties();InputStream input = this.getClass().getClassLoader().getResourceAsStream(FILE_NAME);if (input != null) {try {props.loadFromXML(input);} catch (InvalidPropertiesFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}/*** 返回useSmart标志位 useSmart =true ,分词器使⽤智能切分策略, =false则使⽤细粒度切分 ** @return useSmart*/public boolean useSmart() {return useSmart;}/*** 设置useSmart标志位 useSmart =true ,分词器使⽤智能切分策略, =false则使⽤细粒度切分 ** @param useSmart*/public void setUseSmart(boolean useSmart) {eSmart = useSmart;}/*** 新加函数:设置主词典路径** @return String 主词典路径*/public void setMainDictionary(String path) {if(!StringUtils.isBlank(path)){this.PATH_DIC_MAIN = path;}}/*** 获取主词典路径** @return String 主词典路径*/public String getMainDictionary() {return PATH_DIC_MAIN;}/*** 获取量词词典路径** @return String 量词词典路径*/public String getQuantifierDicionary() {return PATH_DIC_QUANTIFIER;}/*** 获取扩展字典配置路径** @return List<String> 相对类加载器的路径*/public List<String> getExtDictionarys() {List<String> extDictFiles = new ArrayList<String>(2);String extDictCfg = props.getProperty(EXT_DICT);if (extDictCfg != null) {// 使⽤;分割多个扩展字典配置String[] filePaths = extDictCfg.split(";");if (filePaths != null) {for (String filePath : filePaths) {if (filePath != null && !"".equals(filePath.trim())) {extDictFiles.add(filePath.trim());}}}}return extDictFiles;}/*** 获取扩展停⽌词典配置路径** @return List<String> 相对类加载器的路径*/public List<String> getExtStopWordDictionarys() {List<String> extStopWordDictFiles = new ArrayList<String>(2);String extStopWordDictCfg = props.getProperty(EXT_STOP);if (extStopWordDictCfg != null) {// 使⽤;分割多个扩展字典配置String[] filePaths = extStopWordDictCfg.split(";");if (filePaths != null) {for (String filePath : filePaths) {if (filePath != null && !"".equals(filePath.trim())) {extStopWordDictFiles.add(filePath.trim());}}}}return extStopWordDictFiles;}}⼆、IKAnalyzer.cfg.xml默认不指定⾃定义词典 原因有⼆: 其⼀、我们是动态配置⾃定义词典,这⾥配不配配置⼜何妨 其⼆、如果这⾥配置了⾃定义词典、后⾯使⽤我们指定的词典时还需要清空这个⾥配置的词典、 为什么要清空词典?这⾥我要说明⼀下为什么在使⽤我们⾃定义的某个词典前要清空词典:因为你不清空默认就是累加。

测试Ik分词器以及增加自己的词汇

测试Ik分词器以及增加自己的词汇

测试Ik分词器以及增加⾃⼰的词汇测试
启动kibana,打开开发⼯具
ik_smart:最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": ["中华⼈民共和国"]
}
ik_max_word:最细粒度划分,穷尽词库。

GET _analyze
{
"analyzer": "ik_max_word",
"text": ["中华⼈民共和国"]
}
我们输⼊⼀个⼈名:⽐如说宋殿鑫想当Java开发⼯程师,宋殿鑫是⼈名,但是被分开了。

出现问题:有些词被拆开了!
这种⾃⼰需要的词,要加到我们的分词字典中!
Ik分词器增加⾃⼰的配置
来到 elasticsearch-7.6.1\plugins\ik\config ⽬录下,打开IKAnalyzer.cfg.xml
我们先创建⼀个dic⽂件,也就是字典,其实我们打开其他的dic⽂件也是⼀样的。

编写后注⼊到配置⽂件中。

然后重启es和kibana,可以看到我们新加的⽂件
再分词,可以发现,宋殿鑫成为了单独的字段,没被细分。

elasticsearch中文分词器(ik)配置

elasticsearch中文分词器(ik)配置

博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
elasticsearch中文分词器( ik)配置
选择源码版本方式:
由于是maven工程,下载完成后将工程导入到eclipse中编译打包一下 2.将编译打包后的\target\releases\elasticsearch-analysis-ik-1.10.0.zip 解压后所有文件拷贝到 elasticsearch目录下的plugins\analysis-ik目录 下 3.在elasticsearch的config/elasticsearch.yml 添加配置 index.analysis.analyzer.ik.type : "ik" 或者 index: analysis: analyzer: ik: alias: [ik_analyzer] type: org.elasticsearch.index.analysis.IkAnalyzerProvider ik_max_word: type: ik use_smart: false
ik_smart: type: ik use_smart: true
ik、ik_max_word、ik_smart ik等同于ik_max_word,会将文本做最细粒度的拆分。例如“我”“中国人”“中国”,“国人” 而 ik_smart 会做最粗粒度的拆分。earch 5.0及以上版本配置变动 1.移除名为 ik 的analyzer和tokenizer,请分别使用 ik_smart 和 ik_max_word 2.不需要在config/elasticsearch.yml 配置

如何在Elasticsearch中安装中文分词器(IK+pinyin)

如何在Elasticsearch中安装中文分词器(IK+pinyin)

如何在Elasticsearch中安装中⽂分词器(IK+pinyin)如果直接使⽤Elasticsearch的朋友在处理中⽂内容的搜索时,肯定会遇到很尴尬的问题——中⽂词语被分成了⼀个⼀个的汉字,当⽤Kibana作图的时候,按照term来分组,结果⼀个汉字被分成了⼀组。

这是因为使⽤了Elasticsearch中默认的标准分词器,这个分词器在处理中⽂的时候会把中⽂单词切分成⼀个⼀个的汉字,因此引⼊中⽂的分词器就能解决这个问题。

本篇⽂章按照下⾯的内容进⾏描述:分词器的作⽤安装IK简单的测试模拟测试安装elasticsearch-analysis-pinyin简单的测试模拟测试分词器的作⽤分词顾名思义,就是把⼀句话分成⼀个⼀个的词。

这个概念在搜索中很重要,⽐如This is a banana.如果按照普通的空格来分词,分成this,is,a,banana,的出来的a其实对我们并没有什么⽤处。

因此需要注意下⾯的问题:1 区分停顿词(a,or,and这种都属于停顿词)2 ⼤⼩写转换(Banana与banana)3 时态的转换....相⽐中⽂,就复杂的度了。

因为中⽂不能单纯的依靠空格,标点这种进⾏分词。

就⽐如中华⼈民共和国国民,不能简单的分成⼀个词,也不能粗暴的分成中华⼈民共和国和国民,⼈民、中华这些也都算⼀个词!因此常见的分词算法就是拿⼀个标准的词典,关键词都在这个词典⾥⾯。

然后按照⼏种规则去查找有没有关键词,⽐如:正向最⼤匹配(从左到右)逆向最⼤匹配(从右到左)最少切分双向匹配(从左扫描⼀次,从右扫描⼀次)提供了两种⽅式,ik_smart就是最少切分,ik_max_word则为细粒度的切分(可能是双向,没看过源码)了解了分词器的背景后,就可以看⼀下如何在Elasticsearch重安装分词器了。

安装IK在,⽐如我的最新版本2.4.0就没有对应的ik版本,不⽤担⼼,只需要修改pom.xml就可以了:<properties><!-- 这⾥的版本号,修改成你对应的版本就⾏了。

elasticsearch配置ik分词及pinyin分词使搜索同时支持中文和拼音搜索

elasticsearch配置ik分词及pinyin分词使搜索同时支持中文和拼音搜索

elasticsearch配置ik分词及pinyin分词使搜索同时⽀持中⽂和拼⾳搜索1、先下载ik分词和pinyin分词,并放到esplugins相应⽬录中2、定义ik分词后的pinyin分词器,即定义⼀个⾃定义分词器ik_pinyin_analyzer#删除索引DELETE common_poi#创建索引PUT common_poi{"settings": {"number_of_shards": 1,"number_of_replicas": 0}}#关闭索引POST common_poi/_close#⾃定义分词器(ik分器词和拼⾳分词)PUT common_poi/_settings{"settings": {"index": {"analysis": {"analyzer": {"ik_pinyin_analyzer": {"type": "custom","tokenizer": "ik_max_word","filter": ["my_pinyin"]}},"filter": {"my_pinyin": {"type": "pinyin","keep_separate_first_letter": false,"keep_full_pinyin": true,"keep_original": false,"limit_first_letter_length": 10,"lowercase": true,"remove_duplicated_term": true}}}}}}#字段映射PUT common_poi/_mappings{"dynamic":false,"properties":{"id":{"type":"long"},"name":{"type":"text","index":true,"analyzer":"ik_pinyin_analyzer"},"longitude":{"type":"double"},"latitude":{"type":"double"},"address":{"type":"text","index":true,"analyzer":"ik_max_word" },"phone":{"type":"text","index":true},"type":{"type":"text","index":true,"analyzer":"ik_max_word" },"realType":{"type":"text","index":true,"analyzer":"ik_max_word" }}}#打开索引POST common_poi/_open#条件搜索GET common_poi/_search{"query": {"match": {"name": "can饮"}}}。

11个Java开源中文分词器使用方法和分词效果对比

11个Java开源中文分词器使用方法和分词效果对比

1、学会使用11大Java开源中文分词器
2、对比分析11大Java开源中文分词器的分词效果
本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断。

11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口:
从上面的定义我们知道,在Java中,同样的方法名称和参数,但是返回值不同,这种情况不可以使用重载。

这两个方法的区别在于返回值,每一个分词器都可能有多种分词模式,每种模式的分词结果都可能不相同,第一个方法忽略分词器模式,返回所有模式的所有不重复分词结果,第二个方法返回每一种分词器模式及其对应的分词结果。

在这里,需要注意的是我们使用了Java8中的新特性默认方法,并使用stream把一个map 的value转换为不重复的集合。

下面我们利用这11大分词器来实现这个接口:
1、word分词器
2、Ansj分词器
3、Stanford分词器
4、FudanNLP分词器
5、Jieba分词器
6、Jcseg分词器
7、MMSeg4j分词器
8、IKAnalyzer分词器
9、Paoding分词器
10、smartcn分词器
11、HanLP分词器
现在我们已经实现了本文的第一个目的:学会使用11大Java开源中文分词器。

最后我们来实现本文的第二个目的:对比分析11大Java开源中文分词器的分词效果,程序如下:。

ik分词处理过程(源码剖析)[新版]

ik分词处理过程(源码剖析)[新版]

IK的整个分词处理过程首先,介绍一下IK的整个分词处理过程:1. Lucene的分词基类是Analyzer,所以IK提供了Analyzer的一个实现类IKAnalyzer。

首先,我们要实例化一个IKAnalyzer,它有一个构造方法接收一个参数isMaxWordLength,这个参数是标识IK是否采用最大词长分词,还是采用最细粒度切分两种分词算法。

实际两种算法的实现,最大词长切分是对最细粒度切分的一种后续处理,是对最细粒度切分结果的过滤,选择出最长的分词结果。

2. IKAnalyzer类重写了Analyzer的createComponents方法,这个方法接收两个参数,fieldName 和输入流reader,其中fieldName是Lucene的属性列,是对文本内容进行过分词处理和创建索引之后,索引对应的一个名称,类似数据库的列名。

因为IK仅仅涉及分词处理,所以对fieldName没有进行任何处理,所以此处不做任何讨论。

3. createComponents方法在Lucene对文本输入流reader进行分词处理时被调用,在IKAnalyzer的createComponents方法里面仅仅实例化了一个IKTokenizer类,该类继承了Lucene的Tokenizer类。

并重写了incrementToken方法,该方法的作用是处理文本输入流生成token,也就是Lucene的最小词元term,在IK里面叫做Lexeme。

4. 在IKtokenizer的构造方法里面实例化了IK里面最终要的分词类IKSegmenter,也称为主分词器。

它的构造方法接收两个参数,reader和isMaxWordLength。

5. IKSegmenter的构造方法里面,主要做了三个工作,创建上下文对象AnalyzeContext,加载词典,创建子分词器。

6. AnalyzeContext主要是存储分词结果集和记录分词处理的游标位置。

ik分词规则

ik分词规则

ik分词规则一、ik分词概述ik分词是一款开源的中文分词工具,它基于词典和规则的方式进行分词。

ik分词的设计目标是面向搜索引擎的分词,因此在分词效果和性能上都有较好的表现。

二、ik分词的原理1. 正向最大匹配ik分词首先将待分词的文本按照最大词长进行切割,然后从左到右进行匹配,以找到最长的匹配词。

如果匹配成功,则将匹配词作为一个分词结果。

如果匹配失败,则将当前位置的字符作为一个单字分词结果。

然后从下一个位置继续匹配,直到匹配完整个文本。

2. 逆向最大匹配ik分词还支持逆向最大匹配的方式。

与正向最大匹配相比,逆向最大匹配是从右到左进行匹配。

同样地,逆向最大匹配也会找到最长的匹配词作为一个分词结果,如果匹配失败,则将当前位置的字符作为一个单字分词结果。

3. 正向最小匹配在正向最大匹配的基础上,ik分词还支持正向最小匹配的方式。

正向最小匹配是从左到右进行匹配,找到最短的匹配词作为一个分词结果。

如果匹配失败,则将当前位置的字符作为一个单字分词结果。

4. 逆向最小匹配类似地,逆向最小匹配是从右到左进行匹配,找到最短的匹配词作为一个分词结果。

如果匹配失败,则将当前位置的字符作为一个单字分词结果。

三、ik分词的应用1. 搜索引擎ik分词的设计目标之一就是面向搜索引擎的分词,在搜索引擎中广泛应用。

通过对搜索文本进行分词,可以提高搜索的准确性和效率。

2. 文本挖掘在文本挖掘任务中,ik分词可以将一段文本切分成若干个词语,便于后续进行文本特征提取、分类、聚类等操作。

3. 自然语言处理在自然语言处理任务中,ik分词可以将中文文本进行分词,以便于后续的词性标注、命名实体识别、句法分析等处理。

4. 中文信息检索ik分词可以对中文文本进行分词,以便于构建倒排索引,实现中文信息的快速检索。

5. 中文文本分析对于大规模的中文文本数据,ik分词可以将文本进行切分,以便于对文本进行统计分析、词频统计、关键词提取等操作。

结语ik分词是一款功能强大、性能优越的中文分词工具。

IKAnalyzer中文分词器V2012使用手册

IKAnalyzer中文分词器V2012使用手册
词典支持中文,英文,数字混合词语。
1.3 分词效果示例
IK Analyzer 2012 版本支持 细粒度切分 和 智能切分,以下是两种切分方式的演示样例。 文本原文 1: IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。 智能分词结果: ikanalyzer | 是 | 一个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 的 | 中 文 | 分词 | 工具包 | 从 | 2006年 | 12月 | 推出 | 1.0版 | 开始 | ikanalyzer | 已经 | 推 | 出了 | 3个 | 大 | 版本 最细粒度分词结果: ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级
package org.wltea.analyzer.sample;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer;

ElasticSearch(六):IK分词器的安装与使用IK分词器创建索引

ElasticSearch(六):IK分词器的安装与使用IK分词器创建索引

ElasticSearch(六):IK分词器的安装与使⽤IK分词器创建索引之前我们创建索引,查询数据,都是使⽤的默认的分词器,分词效果不太理想,会把text的字段分成⼀个⼀个汉字,然后搜索的时候也会把搜索的句⼦进⾏分词,所以这⾥就需要更加智能的分词器IK分词器了。

1. ik分词器的下载和安装,测试第⼆:解压-->将⽂件复制到 es的安装⽬录/plugin/ik下⾯即可,完成之后效果如下:到这⾥已经完成了,不需要去elasticSearch的 elasticsearch.yml ⽂件去配置。

第三:重启ElasticSearch第四:测试效果未使⽤ik分词器的时候测试分词效果:POST book/_analyze{"text": "我是中国⼈"}//结果是:{"tokens": [{"token": "我","start_offset": 0,"end_offset": 1,"type": "<IDEOGRAPHIC>","position": 0},{"token": "是","start_offset": 1,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 1},{"token": "中","start_offset": 2,"end_offset": 3,"type": "<IDEOGRAPHIC>","position": 2},{"token": "国","start_offset": 3,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 3},{"token": "⼈","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}]}使⽤IK分词器之后,结果如下:POST book_v6/_analyze{"analyzer": "ik_max_word","text": "我是中国⼈"}//结果如下:{"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": 5,"type": "CN_WORD","position": 2},{"token": "中国","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 3},{"token": "国⼈","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 4}]}对于上⾯两个分词效果的解释:1. 如果未安装ik分词器,那么,你如果写 "analyzer": "ik_max_word",那么程序就会报错,因为你没有安装ik分词器2. 如果你安装了ik分词器之后,你不指定分词器,不加上 "analyzer": "ik_max_word" 这句话,那么其分词效果跟你没有安装ik分词器是⼀致的,也是分词成每个汉字。

elasticsearch-analysis-ik使用

elasticsearch-analysis-ik使用

elasticsearch-analysis-ik使用Elasticsearch Analysis IK 文章引导IK 是Elasticsearch 中一款非常常用的分词器,它基于开源的中文分词系统HanLP 进行了二次封装和优化。

在Elasticsearch 中使用IK 分词器可以帮助我们更好地处理中文文本数据,提高搜索准确性和性能。

本文将一步一步回答关于Elasticsearch Analysis IK 的使用问题,帮助读者了解和使用IK 分词器。

一、什么是IK 分词器IK 分词器是为Elasticsearch 设计的一款中文分词插件,它通过将中文文本拆分成一个个词汇(Term),便于搜索引擎对文本进行索引和搜索。

IK 分词器不仅支持常见的分词功能,还具备停用词过滤、同义词扩展等功能,可以大大提高搜索结果的准确性。

二、IK 分词器的特点1. 高性能:IK 分词器经过了多轮优化,可以在保证较高分词准确率的同时,实现高效的分词速度和低内存占用。

2. 支持多种分词模式:IK 分词器提供了细粒度和智能两种分词模式。

细粒度模式将中文文本进行最大长度匹配切分,适用于搜索引擎索引和高亮显示等场景;智能模式则尽可能地将中文文本切分成意义完整的词语,适用于更高级的语义分析。

3. 支持用户自定义扩展词典:IK 分词器允许用户通过配置自定义扩展词典,以满足特定领域的分词需求。

4. 支持同义词扩展:IK 分词器可以通过配置同义词扩展规则,将同义词进行扩展,提高搜索结果的全面性。

三、IK 分词器的安装1. 首先,确保已经正确安装了Elasticsearch,并启动了Elasticsearch 服务。

2. 下载IK 分词器插件包(3. 将下载的插件包解压到Elasticsearch 插件目录下的"plugins" 文件夹中。

4. 重启Elasticsearch 服务,启用IK 分词器。

四、IK 分词器的配置在Elasticsearch 配置文件中,我们可以配置IK 分词器的相关参数,以满足不同场景下的需求。

31.IK分词器配置文件讲解以及自定义词库

31.IK分词器配置文件讲解以及自定义词库

31.IK分词器配置⽂件讲解以及⾃定义词库
主要知识点:
知道IK默认的配置⽂件信息
⾃定义词库
⼀、ik配置⽂件
ik配置⽂件地址:es/plugins/ik/config⽬录
IKAnalyzer.cfg.xml:⽤来配置⾃定义词库
main.dic:ik原⽣内置的中⽂词库,总共有27万多条,只要是这些单词,都会被分在⼀起
quantifier.dic:放了⼀些单位相关的词
suffix.dic:放了⼀些后缀
surname.dic:中国的姓⽒
stopword.dic:英⽂停⽤词
ik原⽣最重要的两个配置⽂件
main.dic:包含了原⽣的中⽂词语,会按照这个⾥⾯的词语去分词
stopword.dic:包含了英⽂的停⽤词
停⽤词(stopword)是指如 a the 等这样的对于搜索⽆意义的单词,停⽤词,会在分词的时候,直接被排除掉,也就是说不会建⽴在倒排索引中
⼆、⾃定义词库
1、⾃⼰建⽴词库:每年都会涌现⼀些特殊的流⾏词,如⽹红,蓝瘦⾹菇,喊麦,⿁畜,⼀般不会在ik的原⽣词典⾥,这时就需要⾃⼰补充⾃⼰的最新的词语,到ik的词库⾥⾯去。

分下⾯两步
在IKAnalyzer.cfg.xml进⾏配制⽂件地址,⼀般不会更改,就按IKAnalyzer.cfg.xml⾥⾯的要求建⽴⽂件夹和⽂件就⾏
在对应的⽂件中加⼊⾃已的词语,⼀般在custom/mydict.dic⾥进⾏增加主要词
然后需要重启es,才能⽣效
2、⾃⼰建⽴停⽤词库:⽐如了,的,啥,么,我们可能并不想去建⽴索引
步骤和上⾯⼀样,只是在custom/ext_stopword.dic中进⾏增加。

elasticsearch ik分词器 使用案例

elasticsearch ik分词器 使用案例

elasticsearch ik分词器使用案例一、概述elasticsearch是一个基于Lucene的开源搜索引擎,它提供了一个分布式、多用户、全文搜索引擎。

在elasticsearch中,分词器是一个非常重要的组件,它能够将文本按照一定规则进行分词,从而提高搜索效率和准确性。

而ik分词器是一款针对中文文本的分词器,它在elasticsearch中有着广泛的应用。

本文将介绍elasticsearch ik分词器的使用案例,帮助读者更好地理解ik分词器在elasticsearch中的应用场景。

二、ik分词器简介ik分词器是elasticsearch中一款针对中文文本的分词器,它采用了多种分词算法,能够较好地处理中文文本。

ik分词器支持中文词库的自定义和扩展,用户可以根据自身需求对分词规则进行定制。

ik分词器具有较高的分词准确性和效率,适用于各种中文文本的分词需求。

三、ik分词器的常见应用场景1. 搜索引擎在搜索引擎开发中,ik分词器能够对用户输入的查询词进行有效的分词处理,提高搜索结果的准确性和覆盖率。

ik分词器能够有效地进行中文分词,将查询词语按照一定规则进行拆分,从而更好地匹配文档内容,提高搜索效果。

2. 文本分析与挖掘在文本分析和挖掘领域,ik分词器能够对大规模中文文本进行快速、准确的分词处理,为后续的文本分析和挖掘工作提供有力支持。

ik 分词器能够对中文文本进行精细化的分词处理,将文本内容转化为可供分析的结构化数据,为文本挖掘提供了基础。

3. 中文全文搜索在中文全文搜索引擎中,ik分词器能够对中文文本进行全文分词,并建立索引,为全文搜索提供了基础。

ik分词器支持对中文文本的多种分词算法,能够处理中文文本中的各种复杂情况,为全文搜索提供了良好的支持。

四、ik分词器的使用案例1. 电商全球信息站商品搜索电商全球信息站的商品搜索是一个典型的利用ik分词器的案例。

用户在电商全球信息站上输入商品查询词时,ik分词器能够对输入的中文词语进行有效的分词处理,从而更好地匹配商品标题、描述等文本内容,提高搜索结果的准确性和覆盖率。

es ik分词器用法

es ik分词器用法

es ik分词器用法
ES IK分词器是一种中文分词器,用于将中文文本分成词语。

以下是ES IK分词器的用法:
1. 安装IK分词器:首先要在Elasticsearch中安装IK分词器插件。

按照IK分词器的安装文档进行安装。

2. 配置IK分词器:在Elasticsearch的配置文件中,将分词器
配置为默认分词器或者特定字段的分词器。

例如,在index的mappings中对特定字段设置分词器。

3. 使用IK分词器:安装和配置完成后,就可以在Elasticsearch中使用IK分词器来进行分词。

可以通过以下方式使用:
- 创建索引时使用:在索引文档时,对中文字段使用分词器。

例如,在索引文档时对"content"字段使用IK分词器。

- 查询时使用:在进行搜索时,可以对搜索词使用分词器进
行分词。

例如,使用IK分词器对搜索词"手机壳"进行分词后
再进行搜索。

4. 理解分词结果:IK分词器将中文文本分词后,可以根据分
词结果进行索引和搜索。

分词结果通常是一个词语列表。

使用ES IK分词器可以更准确地对中文文本进行索引和搜索。

它利用了中文的语言规则和上下文信息,提供了更好的分词效果。

iksegmenter中文分词

iksegmenter中文分词

iksegmenter中文分词1、简介在文本处理和自然语言处理领域,中文分词是一项重要的任务。

它将连续的中文文本切分成一个个有意义的词语,是进一步进行文本分析和特征提取的基础步骤。

本文将介绍i ks eg me n te r中文分词工具,它是一款高效、准确的中文分词器。

2、什么是i k s e g m e n t e r中文分词i k se gm en te r中文分词是一款基于字典和规则的中文分词器。

它通过预先构建一个包含常用中文词汇的字典,并根据一些语法和规则进行分词。

i k se gm en te r能够准确地将中文文本分割成一个个有意义的词语。

3、i ksegmente r中文分词的特点3.1高效性i k se gm en te r中文分词采用了多种优化策略,使其在处理大规模文本时具有较高的效率。

它能够快速将大段文字分割成词语序列,满足实时性的要求。

3.2准确性i k se gm en te r中文分词器基于大规模中文语料库进行训练和优化,具有较高的分词准确性。

它能够识别出多音字、歧义词,并正确地进行切分,保证分词结果的准确性。

3.3可定制性i k se gm en te r中文分词提供了丰富的参数配置选项,用户可以根据自己的需求进行灵活的设置。

它支持自定义字典,用户可以添加特定领域的专有词汇,提高分词效果。

4、安装和使用iksegme nter中文分词4.1安装i k s e g m e n t e ri k se gm en te r可以通过pi p命令进行安装,如下所示:p i pi ns ta ll ik se gme n te r4.2使用i k s e g m e n t e r使用ik se gm en te r很简单,只需导入相应的模块,并调用分词函数即可。

示例代码如下:f r om ik se gm en te rim p or ts eg me nt ert e xt="这是一段需要进行中文分词的文本"r e su lt=s eg me nt er.s eg me nt(t ex t)p r in t(re su lt)5、i ksegmente r中文分词的应用场景i k se gm en ter中文分词在多个领域的文本处理任务中发挥着重要作用,如:-搜索引擎优化:通过合理的分词可以提高搜索引擎的搜索效果。

Elasticsearch中文分词(elasticsearch-analysis-ik)安装

Elasticsearch中文分词(elasticsearch-analysis-ik)安装

Elasticsearch中⽂分词(elasticsearch-analysis-ik)安装安装步骤:右侧下⽅有⼀个按钮“Download ZIP",点击下载源代码elasticsearch-analysis-ik-master.zip。

2、解压⽂件elasticsearch-analysis-ik-master.zip,进⼊下载⽬录,执⾏命令:unzip elasticsearch-analysis-ik-master.zip3、因为是源代码,此处需要使⽤maven打包,进⼊解压⽂件夹中,执⾏命令:mvn clean package4、将打包后,得到的⽬录⽂件target/releases下的elasticsearch-analysis-ik-1.9.4.zip复制到ES安装⽬录的plugins/analysis-ik⽬录下。

5、在plugins/analysis-ik⽬录下解压elasticsearch-analysis-ik-1.9.4.zip6、在ES的配置⽂件elasticsearch.yml中增加ik的配置,在最后增加:index.analysis.analyzer.ik.type: "ik"7、重新启动elasticsearch服务,这样就完成配置了,收⼊命令:curl -XPOST "http://localhost:9200/_analyze?analyzer=ik&pretty=true&text=helloworld,中华⼈民共和国"测试结果如下:{"tokens" : [ {"token" : "helloworld","start_offset" : 0,"end_offset" : 10,"type" : "ENGLISH","position" : 0}, {"token" : "中华⼈民共和国","start_offset" : 11,"end_offset" : 18,"type" : "CN_WORD","position" : 1}, {"token" : "中华⼈民","start_offset" : 11,"end_offset" : 15,"type" : "CN_WORD","position" : 2}, {"token" : "中华","start_offset" : 11,"end_offset" : 13,"type" : "CN_WORD","position" : 3}, {"token" : "华⼈","start_offset" : 12,"end_offset" : 14,"type" : "CN_WORD","position" : 4}, {"token" : "⼈民共和国","start_offset" : 13,"end_offset" : 18,"type" : "CN_WORD","position" : 5}, {"token" : "⼈民","start_offset" : 13,"end_offset" : 15,"type" : "CN_WORD","position" : 6}, {"token" : "共和国","start_offset" : 15,"end_offset" : 18,"type" : "CN_WORD","position" : 7}, {"token" : "共和","start_offset" : 15,"end_offset" : 17,"type" : "CN_WORD","position" : 8}, {"token" : "国","start_offset" : 17,"end_offset" : 18,"type" : "CN_CHAR","position" : 9} ]}注意点:本⼈绕了很多弯路,⽹上很多都不⾏,总结:⼀、maven⼀定要编译,因为elasticsearch和ik各个版本不同,对应编译⽣成的⽂件就不同,所以想引⽤elasticsearch-rtm包的朋友,⼀定要注意区分。

IK分词器用法

IK分词器用法

IK分词器⽤法⼀)新建maven⼯程1.1)项⽬结构如下:1.2)IKAnalyzer.cfg.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "/dtd/properties.dtd"><properties><comment>IK Analyzer 扩展配置</comment><entry key="ext_dict">extend.dic;</entry><entry key="ext_stopwords">stopword.dic;</entry></properties>1.3)在pom⽂件中添加如下jar<dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer</artifactId><version>2012_u6</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.7.2</version></dependency>⼆)新建类IKAnalyzerSupplyProductpublic class IKAnalyzerSupplyProduct {public static String startIKAnalyzer(String line) throws IOException{IKAnalyzer analyzer = new IKAnalyzer();// 使⽤智能分词analyzer.setUseSmart(true);// 打印分词结果try {return printAnalysisResult(analyzer, line);} catch (Exception e) {e.printStackTrace();}finally{if(analyzer!=null){analyzer.close();}}return null;}private static String printAnalysisResult(Analyzer analyzer, String keyWord)throws Exception {String resultdata="";String infoData="";if(keyWord!=""&&keyWord!=null){TokenStream tokenStream = analyzer.tokenStream("content",new StringReader(keyWord));tokenStream.addAttribute(CharTermAttribute.class);tokenStream.reset();while (tokenStream.incrementToken()) {CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);String dest= NumberUtil.checkNumber(charTermAttribute.toString().replace("-",""));boolean mailres= RegExpUtil.isEmail(charTermAttribute.toString());boolean hpres=RegExpUtil.isHomepage(charTermAttribute.toString());boolean num=RegExpUtil.isNum(charTermAttribute.toString().replace("-", "").replace("qq", "").replace("QQ", "").replace("+", ""));if(dest!="CELLPHONE"&&dest!="FIXEDPHONE"&&mailres==false&&hpres==false&&num==false){infoData=infoData+" "+charTermAttribute.toString();}}if(infoData!=""&&infoData!=null){resultdata=resultdata+infoData.trim()+"\r\n";}else{resultdata="";}}return resultdata;}public static void main(String[] args) {String word ="8⽉17⽇,“雄鹰突击-2018”中国和⽩俄罗斯特种部队联合训练,在北部战区陆军某综合训练基地完成综合演练并举⾏结训仪式。

ESik分词器使用技巧

ESik分词器使用技巧

ESik分词器使⽤技巧match查询会将查询词分词,然后对分词的结果进⾏term查询。

然后默认是将每个分词term查询之后的结果求交集,所以只要分词的结果能够命中,某条数据就可以被查询出来,⽽分词是在新建索引时指定的,只有text类型的数据才能设置分词策略。

新建索引,并指定分词策略:PUT mail_test3{"settings": {"index": {"refresh_interval": "30s","number_of_shards": "1","number_of_replicas": "0"}},"mappings": {"default": {"_all": {"enabled": false},"_source": {"enabled": true},"properties": {"addressTude": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart","copy_to": ["commonText"],"fielddata": true},"captureTime": {"type": "long"},"commonText": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart","fielddata": true},"commonNum":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart","fielddata": true},"imsi": {"type": "keyword","copy_to": ["commonNum"]},"uuid": {"type": "keyword"}}}}}analyzer 指的是在建索引时的分词策略,search_analyzer 指的是在查询时的分词策略。

ik_max_word和ik_smart介绍

ik_max_word和ik_smart介绍

ik_max_word和ik_smart介绍习过Solr或Elasticsearch的同学都知道IK分词器,它是⼀个针对中⽂的分词器。

1、ik_max_word会将⽂本做最细粒度的拆分,⽐如会将“中华⼈民共和国⼈民⼤会堂”拆分为“中华⼈民共和国、中华⼈民、中华、华⼈、⼈民共和国、⼈民、共和国、⼤会堂、⼤会、会堂等词语。

2、ik_smart会做最粗粒度的拆分,⽐如会将“中华⼈民共和国⼈民⼤会堂”拆分为中华⼈民共和国、⼈民⼤会堂。

测试两种分词模式的效果:发送:post localhost:9200/_analyze测试ik_max_word{“text”:“中华⼈民共和国⼈民⼤会堂”,“analyzer”:“ik_max_word” }测试ik_smart{“text”:“中华⼈民共和国⼈民⼤会堂”,“analyzer”:“ik_smart” }最佳实践两种分词器使⽤的最佳实践是:索引时⽤ik_max_word,在搜索时⽤ik_smart。

即:索引时最⼤化的将⽂章内容分词,搜索时更精确的搜索到想要的结果。

举个例⼦:我是个⽤户,输⼊“华为⼿机”,我此时的想法是想搜索出“华为⼿机”的商品,⽽不是华为其它的商品,也就是商品信息中必须只有华为⼿机这个词。

此时使⽤ik_smart和ik_max_word都会将华为⼿机拆分为华为和⼿机两个词,那些只包括“华为”这个词的信息也被搜索出来了,我的⽬标是搜索只包含华为⼿机这个词的信息,这没有满⾜我的⽬标。

怎么解决呢?我们可以将华为⼿机添加到⾃定义词库,添加后两个分词器的效果为:ik_max_word 的分词效果:{“tokens”: [{“token”: “华为⼿机”,“start_offset”: 0,“end_offset”: 4,“type”: “CN_WORD”,“position”: 0},{“token”: “华为”,“start_offset”: 0,“end_offset”: 2,“type”: “CN_WORD”,“position”: 1},{“token”: “⼿机”,“start_offset”: 2,“end_offset”: 4,“type”: “CN_WORD”,“position”: 2}]}ik_smart的分词效果:{“tokens”: [{“token”: “华为⼿机”,“start_offset”: 0,“end_offset”: 4,“type”: “CN_WORD”,“position”: 0}]}看到两个分词器的区别了吧,因为华为⼿机是⼀个词,所以ik_smart不再细粒度分了。

elasticsearch-analysis-ik 编译 -回复

elasticsearch-analysis-ik 编译 -回复

elasticsearch-analysis-ik 编译-回复elasticsearch-analysis-ik 编译,以中括号内的内容为主题,写一篇1500-2000字文章,一步一步回答Elasticsearch 是一个开源的分布式搜索和分析引擎,它能够快速、强大地处理和分析大量数据。

而elasticsearch-analysis-ik 则是一个专门为Elasticsearch 开发的中文分词插件。

在本篇文章中,我们将一步一步回答关于elasticsearch-analysis-ik 编译的问题,帮助您了解如何为这个插件进行编译。

第一步:准备工作在开始编译之前,我们需要准备一些必要的软件和环境。

首先,确保您已经正确安装了Java 开发工具包(JDK),以便能够编译Java 代码。

其次,您需要安装Maven,这是一个用于管理和构建Java 项目的工具。

最后,您需要安装Git,用于从源代码库中获取elasticsearch-analysis-ik。

第二步:克隆elasticsearch-analysis-ik 源代码在您的命令行界面中,使用以下命令克隆elasticsearch-analysis-ik 代码库:git clone该命令将会在当前目录下创建一个名为`elasticsearch-analysis-ik` 的文件夹,其中包含了插件的源代码。

第三步:进入源代码目录并编译在命令行中,进入`elasticsearch-analysis-ik` 文件夹,并执行以下命令进行编译:cd elasticsearch-analysis-ikmvn clean package这个命令将使用Maven 构建elasticsearch-analysis-ik 插件,并生成一个ZIP 文件,里面包含了需要的组件和依赖。

第四步:安装编译的插件在编译成功后,您可以将生成的ZIP 文件解压缩到Elasticsearch 插件目录中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
</analyzer>
<analyzer type="query">
<tokenizer class="info.search.IKAnalyzerSolrFactory" useSmart="true"/>
</analyzer>
</fieldType>
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.wltea.analyzer.lucene.IKTokenizer;
<fieldType name="text_zh_my" class="solr.TextField">
<analyzer type="index">
<tokenizer class="info.search.IKAnalyzerSolrFactory" useSmart="false"/>
public class IKAnalyzerSolrFactory extends TokenizerFactory{
private boolean useSmart;
public boolean useSmart() {
return useSmart;
}
public void setUseSmart(boolean useSmart) {
在社区中的IKAnalyzer-2012FF_hf1与solr匹配,但其PDF中介绍的useSmart一直无法使用和生效,主要是其用错了类
现开发一个class,可以解决useSmart不生效的问题,创建如下类:
Байду номын сангаас
package info.search;
import java.io.Reader;
eSmart = useSmart;
}
public void init(Map<String, String> args) {
super.init(args);
this.setUseSmart(args.get("useSmart").toString().equals("true"));
}
public Tokenizer create(Reader input) {
Tokenizer _IKTokenizer = new IKTokenizer(input , eSmart);
return _IKTokenizer;
}
}
然后在schema.xml中加入
相关文档
最新文档