Elasticsearch 2.2.0 分词篇:中文分词

在Elasticsearch中,内置了很多分词器(analyzers),但默认的分词器对中文的支持都不是太好。所以需要单独安装插件来支持,比较常用的是中科院 ICTCLAS的smartcn和IKAnanlyzer效果还是不错的,但是目前IKAnanlyzer还不支持最新的Elasticsearch2.2.0版本,但是smartcn中文分词器默认官方支持,它提供了一个中文或混合中文英文文本的分析器。支持最新的2.2.0版本版本。但是smartcn不支持自定义词库,作为测试可先用一下。后面的部分介绍如何支持最新的版本。

smartcn

安装分词:plugin install analysis-smartcn

卸载:plugin remove analysis-smartcn

测试:

请求:POST http://127.0.0.1:9200/_analyze/

{

"analyzer": "smartcn",

"text": "联想是全球最大的笔记本厂商"

}

返回结果:

{

"tokens": [

{

"token": "联想",

"start_offset": 0,

"end_offset": 2,

"type": "word",

"position": 0

},

{

"token": "是",

"start_offset": 2,

"end_offset": 3,

"type": "word",

"position": 1

},

{

"token": "全球",

"start_offset": 3,

"end_offset": 5,

"type": "word",

"position": 2

},

{

"token": "最",

"start_offset": 5,

"end_offset": 6,

"type": "word",

"position": 3

},

{

"token": "大",

"start_offset": 6,

"end_offset": 7,

"type": "word",

"position": 4

},

{

"token": "的",

"start_offset": 7,

"end_offset": 8,

"type": "word",

"position": 5

},

{

"token": "笔记本",

"start_offset": 8,

"end_offset": 11,

"type": "word",

"position": 6

},

{

"token": "厂商",

"start_offset": 11,

"end_offset": 13,

"type": "word",

"position": 7

}

]

}

作为对比,我们看一下标准的分词的结果,在请求中巴smartcn,换成standard

然后看返回结果:

{

"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

},

{

"token": "最",

"start_offset": 5,

"end_offset": 6,

"type": "<IDEOGRAPHIC>",

"position": 5

},

{

"token": "大",

"start_offset": 6,

"end_offset": 7,

"type": "<IDEOGRAPHIC>",

"position": 6

},

{

"token": "的",

"start_offset": 7,

"end_offset": 8,

"type": "<IDEOGRAPHIC>",

"position": 7

},

{

"token": "笔",

"start_offset": 8,

"end_offset": 9,

"type": "<IDEOGRAPHIC>",

"position": 8

},

{

"token": "记",

"start_offset": 9,

"end_offset": 10,

"type": "<IDEOGRAPHIC>",

"position": 9

},

{

"token": "本",

"start_offset": 10,

"end_offset": 11,

"type": "<IDEOGRAPHIC>",

"position": 10

},

{

"token": "厂",

"start_offset": 11,

"end_offset": 12,

"type": "<IDEOGRAPHIC>",

"position": 11

},

{

"token": "商",

"start_offset": 12,

"end_offset": 13,

"type": "<IDEOGRAPHIC>",

"position": 12

}

]

}

从中可以看出,基本上不能使用,就是一个汉字变成了一个词了。

本文由赛克 蓝德(secisland)原创,转载请标明作者和出处。

IKAnanlyzer支持2.2.0版本

目前github上最新的版本只支持Elasticsearch2.1.1,路径为https://github.com/medcl/elasticsearch-analysis-ik。但现在最新的Elasticsearch已经到2.2.0了所以要经过处理一下才能支持。

1、下载源码,下载完后解压到任意目录,然后修改elasticsearch-analysis-ik-master目录下的pom.xml文件。找到<elasticsearch.version>行,然后把后面的版本号修改成2.2.0。

2、编译代码mvn package。

3、编译完成后会在target\releases生成elasticsearch-analysis-ik-1.7.0.zip文件。

4、解压文件到Elasticsearch/plugins目录下。

5、修改配置文件增加一行:index.analysis.analyzer.ik.type : "ik"

6、重启Elasticsearch。

测试:和上面的请求一样,只是把分词替换成ik

返回的结果:

{

"tokens": [

{

"token": "联想",

"start_offset": 0,

"end_offset": 2,

"type": "CN_WORD",

"position": 0

},

{

"token": "全球",

"start_offset": 3,

"end_offset": 5,

"type": "CN_WORD",

"position": 1

},

{

"token": "最大",

"start_offset": 5,

"end_offset": 7,

"type": "CN_WORD",

"position": 2

},

{

"token": "笔记本",

"start_offset": 8,

"end_offset": 11,

"type": "CN_WORD",

"position": 3

},

{

"token": "笔记",

"start_offset": 8,

"end_offset": 10,

"type": "CN_WORD",

"position": 4

},

{

"token": "笔",

"start_offset": 8,

"end_offset": 9,

"type": "CN_WORD",

"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": 11,

"end_offset": 13,

"type": "CN_WORD",

"position": 8

}

]

}

从中可以看出,两个分词器分词的结果还是有区别的。

扩展词库,在config\ik\custom下在mydict.dic中增加需要的词组,然后重启Elasticsearch,需要注意的是文件编码是UTF-8 无BOM格式编码。

比如增加了赛克蓝德单词。然后再次查询:

请求:POST http://127.0.0.1:9200/_analyze/

参数:

{

"analyzer": "ik",

"text": "赛克蓝德是一家数据安全公司"

}

返回结果:

{

"tokens": [

{

"token": "赛克蓝德",

"start_offset": 0,

"end_offset": 4,

"type": "CN_WORD",

"position": 0

},

{

"token": "克",

"start_offset": 1,

"end_offset": 2,

"type": "CN_WORD",

"position": 1

},

{

"token": "蓝",

"start_offset": 2,

"end_offset": 3,

"type": "CN_WORD",

"position": 2

},

{

"token": "德",

"start_offset": 3,

"end_offset": 4,

"type": "CN_CHAR",

"position": 3

},

{

"token": "一家",

"start_offset": 5,

"end_offset": 7,

"type": "CN_WORD",

"position": 4

},

{

"token": "一",

"start_offset": 5,

"end_offset": 6,

"type": "TYPE_CNUM",

"position": 5

},

{

"token": "家",

"start_offset": 6,

"end_offset": 7,

"type": "COUNT",

"position": 6

},

{

"token": "数据",

"start_offset": 7,

"end_offset": 9,

"type": "CN_WORD",

"position": 7

},

{

"token": "安全",

"start_offset": 9,

"end_offset": 11,

"type": "CN_WORD",

"position": 8

},

{

"token": "公司",

"start_offset": 11,

"end_offset": 13,

"type": "CN_WORD",

"position": 9

}

]

}

从上面的结果可以看出已经支持赛克蓝德单词了。

赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注。

时间: 2024-10-05 04:55:27

Elasticsearch 2.2.0 分词篇:中文分词的相关文章

中文分词技术(中文分词原理)

一.       为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分.除此之外,还有最大切分(包括向前.向后.以及前后相结合).最少切分.全切分等等. 二.       中文分词技术的分类 我们讨论的分词算法可分为三大类:基于字典.词库匹配的分词方法:基于词频度统计的分词方法

Ubuntu16.04下安装elasticsearch+kibana实现php客户端的中文分词

1.下载安装elasticsearch和kibana wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.deb dpkg -i elasticsearch-5.4.2.deb wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.2-amd64.deb dpkg -i kibana-5.4.2-amd64.deb 2.安装

Solr6.6.0添加IK中文分词器

IK分词器就是一款中国人开发的,扩展性很好的中文分词器,它支持扩展词库,可以自己定制分词项,这对中文分词无疑是友好的. jar包下载链接:http://pan.baidu.com/s/1o85I15o 密码:p82g下载好之后,将IK对应的jar复制到项目的D:\tomcat\webapps\solr\WEB-INF\lib下面,然后在WEB-INF下面创建一个classes的目录,将其余三个文件(IKAnalyzer.cfg.xml , ext.dic和stopword.dic)复制到这个cl

Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,elasticsearch安装配置及中文分词

http://fuxiaopang.gitbooks.io/learnelasticsearch/content/  (中文) 在Elasticsearch中,文档术语一种类型(type),各种各样的类型存在于一个索引中.你也可以通过类比传统的关系数据库得到一些大致的相似之处: 关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引 ⇒ 类型 ⇒ 文档 ⇒ 字段(Fields)一个Elasticsearch集群可以包含多个索引(数据库),也就是说其

我与solr(六)--solr6.0配置中文分词器IK Analyzer

转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无法进行正确的高亮显示.现在配置一下分词器来解决相关问题. solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用.一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持solr6.0这个高版本的,所以就会发送运行

ElasticSearch第三步-中文分词

elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍ik的用法, 当我们创建一个index(库db_news)时,easticsearch默认提供的分词器db_news,分词结果会把每个汉字分开,而不是我们想要的根据关键词来分词.例如: 代码如下: GET /db_news/_analyze?analyzer=standard { 我爱北京天安门

Windows ElasticSearch中文分词配置

elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍ik的用法, 当我们创建一个index(库db_news)时,easticsearch默认提供的分词器db_news,分词结果会把每个汉字分开,而不是我们想要的根据关键词来分词.例如: 代码如下: 正常情况下,这不是我们想要的结果,比如我们更希望 “我”,“爱”,“北京”,"天安门"这样

elasticsearch学习笔记-倒排索引以及中文分词

我们使用数据库的时候,如果查询条件太复杂,则会涉及到很多问题 1.无法维护,各种嵌套查询,各种复杂的查询,想要优化都无从下手 2.效率低下,一般语句复杂了之后,比如使用or,like %,,%查询之后数据库的索引就没有办法利用到了,这个时候的搜索就会全表扫描,数据量少的时候可能性能还能接受,但是数据量大了之后性能会直线下降,速度慢的一塌胡萝卜.. 但是呢,数据库的聚集索引查询还是极快的, 所以我们可以利用这一点尝试建立一下这样的索引结构--就是把数据库里面的每一条记录作为一个键,相同记录的Id的

【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示

前面总结的都是使用Lucene的标准分词器,这是针对英文的,但是中文的话就不顶用了,因为中文的语汇与英文是不同的,所以一般我们开发的时候,有中文的话肯定要使用中文分词了,这一篇博文主要介绍一下如何使用smartcn中文分词器以及对结果的高亮显示. 1. 中文分词 使用中文分词的话,首先到添加中文分词的jar包. <!-- lucene中文分词器 --> <dependency> <groupId>org.apache.lucene</groupId> <

Lucene使用IKAnalyzer中文分词笔记

本文主要讲解IKAnalyzer(以下简称'IK')在Lucene中的具体使用,关于Lucene和IK分词器的背景及其作用在这里就不再熬述.不得不感叹下Lucene版本变更的快速,如今最新已经到了4.9.0,相信任何技术的发展壮大都不可避免有这一过程.本文使用的是Lucene4.0,IKAnalyzer使用的是2012FF版. Lucene下载请移步官网,IK下载地址如下: http://code.google.com/p/ik-analyzer/downloads/list IK下载完成够拷贝