ElasticSearch.net第三步-中文分词
来源:互联网 发布:读卡器输出格式软件 编辑:程序博客网 时间:2024/06/05 02:36
elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好,好在国内有medcl大神(国内最早研究es的人之一)写的两个中文分词插件,一个是ik的,一个是mmseg的,下面分别介绍ik的用法,
当我们创建一个index(库db_news)时,easticsearch默认提供的分词器db_news,分词结果会把每个汉字分开,而不是我们想要的根据关键词来分词。例如:
代码如下:
GET /db_news/_analyze?analyzer=standard{ 我爱北京天安门}
分词结果如下:
{ "tokens": [ { "token": "我", "start_offset": 6, "end_offset": 7, "type": "<IDEOGRAPHIC>", "position": 1 }, { "token": "爱", "start_offset": 7, "end_offset": 8, "type": "<IDEOGRAPHIC>", "position": 2 }, { "token": "北", "start_offset": 8, "end_offset": 9, "type": "<IDEOGRAPHIC>", "position": 3 }, { "token": "京", "start_offset": 9, "end_offset": 10, "type": "<IDEOGRAPHIC>", "position": 4 }, { "token": "天", "start_offset": 10, "end_offset": 11, "type": "<IDEOGRAPHIC>", "position": 5 }, { "token": "安", "start_offset": 11, "end_offset": 12, "type": "<IDEOGRAPHIC>", "position": 6 }, { "token": "门", "start_offset": 12, "end_offset": 13, "type": "<IDEOGRAPHIC>", "position": 7 } ]}
正常情况下,这不是我们想要的结果,比如我们更希望 “我”,“爱”,“北京”,"天安门"这样的分词,这样我们就需要安装中文分词插件,ik就是实现这个功能的。
安装ik插件
第一种方式是直接下载配置,这种方式比较麻烦(对于Windows用户来讲),这里我也不讲了
下载地址:https://github.com/medcl/elasticsearch-analysis-ik
********************************************************************************************
第二种方式是直接下载elasticsearch中文发行版。下载地址是:https://github.com/medcl/elasticsearch-rtf。重新运行安装。
执行命令:
GET /db_news/_analyze?analyzer=ik{ 我爱北京天安门啊王军华 }
结果如下:
{ "tokens": [ { "token": "我", "start_offset": 6, "end_offset": 7, "type": "CN_CHAR", "position": 1 }, { "token": "爱", "start_offset": 7, "end_offset": 8, "type": "CN_CHAR", "position": 2 }, { "token": "北京", "start_offset": 8, "end_offset": 10, "type": "CN_WORD", "position": 3 }, { "token": "天安门", "start_offset": 10, "end_offset": 13, "type": "CN_WORD", "position": 4 }, { "token": "啊", "start_offset": 13, "end_offset": 14, "type": "CN_CHAR", "position": 5 }, { "token": "王军", "start_offset": 14, "end_offset": 16, "type": "CN_WORD", "position": 6 }, { "token": "华", "start_offset": 16, "end_offset": 17, "type": "CN_CHAR", "position": 7 } ]}
关于分词器定义需要注意的地方
如果我们直接创建索引库,会使用默认的分词进行分词,这不是我们想要的结果。这个时候我们再去更改分词器会报错如下:
{ "error": "IndexAlreadyExistsException[[db_news] already exists]", "status": 400}
而且没有办法解决冲突,唯一的办法是删除已经存在的索引,新建一个索引,并制定mapping使用新的分词器(注意要在数据插入之前,否则会使用elasticsearch默认的分词器)。
新建索引命令如下:
PUT /db_news{ "settings" : { "analysis" : { "analyzer" : { "stem" : { "tokenizer" : "standard", "filter" : ["standard", "lowercase", "stop", "porter_stem"] } } } }, "mappings" : { "person" : { "dynamic" : true, "properties" : { "intro" : { "type" : "string",
"indexAnalyzer" : "ik",
"searchAnalyzer":"ik"
} } } }}
查看新建的索引:
GET /db_news/_mapping
结果如下:
{ "db_news": { "mappings": { "person": { "dynamic": "true", "properties": { "age": { "type": "long" }, "intro": { "type": "string", "analyzer": "ik" }, "name": { "type": "string" } } } } }}
更新映射
说明:对于db_news/news,开始没有字段msgs,后来添加了这个字段,那么要先修改索引方式,在新增数据
PUT /db_news/_mapping/news{ "properties" : { "msgs" : { "type" : "string", "indexAnalyzer" : "ik", "searchAnalyzer":"ik" } }}
- ElasticSearch.net第三步-中文分词
- lucene第三步,分词
- ELK第三篇:Elasticsearch安装IK中文分词插件
- elasticsearch中文分词
- elasticsearch中文分词集成
- elasticsearch中文分词
- elasticsearch中文分词
- Elasticsearch替换中文分词
- elasticsearch设置中文分词
- elasticsearch 配置中文分词
- elasticsearch 中文分词
- Elasticsearch 使用中文分词
- Elasticsearch设置中文分词
- ElasticSearch的中文分词
- Elasticsearch 使用中文分词
- ElasticSearch中文分词ik安装
- ES007-Elasticsearch中文分词集成
- ElasticSearch中文分词IK安装
- 《七点三刻》有价值的新闻早餐 2017年11月19日星期日,第010期
- Angular2组件与指令的小实践——实现一个图片轮播组件
- ElasticSearch.net第一步-环境配置
- Xcode9学习笔记66
- ElasticSearch.net第二步-CRUD之Sense
- ElasticSearch.net第三步-中文分词
- ElasticSearch.net第四步-查询详解
- ElasticSearch.net第五步-c#操作ElasticSearch详解
- 日本无人酒吧开业,利用人工智能提高待客服务
- C#类和对象(九)——扩展方法
- 谷歌宣布对外开放聊天机器人数据分析平台Chatbase
- 中科院在2017年高被引科学家遴选中表现优异
- Error: Could not resolve SDK path for 'macosx10.8'
- 中国超算项目获戈登贝尔奖:首次高分辨率精确模拟唐山大地震