前言
由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用。当然前提是有elasticsearch的插件。 至于插件怎么开发,这里有一片文章介绍:
http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/
暂时还没时间看,留在以后仔细研究, 这里只记录本人使用medcl提供的IK分词插件的集成步骤。
一、插件准备
网上有介绍说可以直接用plugin -install medcl/elasticsearch-analysis-ik的办法,但是我执行下来的效果只是将插件的源码下载下来,elasticsearch只是将其作为一个_site插件看待。
所以只有执行maven并将打包后的jar文件拷贝到上级目录。
(否则在定义mapping的analyzer的时候会提示找不到类的错误)。
由于IK是基于字典的分词,所以还要下载IK的字典文件,在medcl的elasticsearch-RTF中有,可以通过这个地址下载:
http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip
下载之后解压缩到config目录下。
到这里,你可能需要重新启动下elasticsearch,好让下一部定义的分词器能立即生效。
二、分词定义
分词插件准备好之后就可以在elasticsearch里定义(声明)这个分词类型了(自带的几个类型,比如standred则不需要特别定义)。
跟其他设置一样,分词的定义也可以在系统级(elasticsearch全局范围),也可以在索引级(只在当前index内部可见)。系统级的定义当然是指在conf目录下的elasticsearch.yml文件里定义,内容大致如下:
index: analysis: analyzer: ikAnalyzer: alias: [ik] type: org.elasticsearch.index.analysis.IkAnalyzerProvider
因为个人喜好,我并没有这么做, 而是定义在了需要使用中文分词的index中,这样定义更灵活,也不会影响其他index。
在定义analyze之前,先关闭index。其实并不需要关闭也可以生效,但是为了数据一致性考虑,还是先执行关闭。(如果是线上的系统需要三思)
curl -XPOST http://localhost:9400/application/_close
(很显然,这里的application是我的一个index)
然后执行:
curl -XPUT localhost:9400/application/_settings -d ' { "analysis": { "analyzer":{ "ikAnalyzer":{ "type":"org.elasticsearch.index.analysis.IkAnalyzerProvider", "alias":"ik" } } } } '
打开index:
curl -XPOST http://localhost:9400/application/_open
到此为止一个新的类型的分词器就定义好了,接下来就是要如何使用了
三、使用分词器
在将分词器使用到实际数据之前,可以先测验下分词效果:
http://localhost:9400/application/_analyze?analyzer=ik&text=中文分词
分词结果是:
{ "tokens" : [ { "token" : "中文", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 1 }, { "token" : "分词", "start_offset" : 2, "end_offset" : 4, "type" : "CN_WORD", "position" : 2 } ] }
与使用standard分词器的效果更合理了:
{ "tokens" : [ { "token" : "中", "start_offset" : 0, "end_offset" : 1, "type" : "<IDEOGRAPHIC>", "position" : 1 }, { "token" : "文", "start_offset" : 1, "end_offset" : 2, "type" : "<IDEOGRAPHIC>", "position" : 2 }, { "token" : "分", "start_offset" : 2, "end_offset" : 3, "type" : "<IDEOGRAPHIC>", "position" : 3 }, { "token" : "词", "start_offset" : 3, "end_offset" : 4, "type" : "<IDEOGRAPHIC>", "position" : 4 } ] }
新的分词器定义完成,工作正常后就可以在mapping的定义中引用了,比如我定义这样的type:
curl localhost:9400/application/article/_mapping -d ' { "article": { "properties": { "description": { "type": "string", "indexAnalyzer":"ikAnalyzer", "searchAnalyzer":"ikAnalyzer" }, "title": { "type": "string", "indexAnalyzer":"ik", "searchAnalyzer":"ik" } } } } '
很遗憾,对于已经存在的index来说,要将一个string类型的field从standard的分词器改成别的分词器通常都是失败的:
{ "error": "MergeMappingException[Merge failed with failures {[mapper [description] has different index_analyzer, mapper [description] has different search_analyzer]}]", "status": 400 }
而且没有办法解决冲突,唯一的办法是新建一个索引,并制定mapping使用新的分词器(注意要在数据插入之前,否则会使用elasticsearch默认的分词器)
curl -XPUT localhost:9400/application/article/_mapping -d ' { "article" : { "properties" : { "description": { "type": "string", "indexAnalyzer":"ikAnalyzer", "searchAnalyzer":"ikAnalyzer" }, "title": { "type": "string", "indexAnalyzer":"ik", "searchAnalyzer":"ik" } } } }
至此,一个带中文分词的elasticsearch就算搭建完成。 想偷懒的可以下载medcl的elasticsearch-RTF直接使用,里面需要的插件和配置基本都已经设置好。
相关推荐
elasticsearch集成ik分词器详细文档,包括elasticsearch的应用和部署
Elasticsearch 7.6.2 已集成ik分词器 解压后运行bin目录下,elasticsearch.bat文件
lasticsearch整合分词、创建索引、搜索例子,elasticsearch版本为1.0,索引数据从数据表中动态读取生成,有关键字高亮效果,查询分页 1 在dababase目录中导致相关的数据库文件,修改DBCOperation java文件数据库连接...
测试Head http://192.168.0.1:9200/_plugin/head/ 测试Ik http://192.168.0.1:9200/index/_analyze?analyzer=ik&pretty=true&text=%E6%88%90%E5%8A%9F%E5%AE%89%E8%A3%85%E6%8F%92%E4%BB%B6
一、概述 一般来说我们开发Elasticsearch会选择使用集成springboot,在网上找的springboot集成elasticsearch文章几乎都是extends ElasticsearchRepository...4、中文分词elasticsearch-analysis-ik (ik) 1、下载ela
ElasticSearch - ES集成ik分词器-附件资源
Spring Boot结合Jest实现对ElasticSearch的全文检索,分词检索,分页,搜索结果高亮关键词,多字段检索 PageController中的搜索方法里面是全套的,分词,分页,高亮等都包含,数据格式个es-head中创建索引的索引在...
Elasticsearch-analysis-ik是一个将Lucence IK分词器集成到elasticsearch的ik分词器插件,并且支持自定义的词典。
elasticsearch spring 集成,用到maven elasticsearch服务下载包括其中插件和分词,可以简单参考下
elasticsearch-2.2.0集成ik分词
2、es需要修改linux宿主机的一些参数 设置vm.max_map_count=262144 vim /etc/sysctl.conf vm.max_map_count=262144 不重启, 直接生效当前的命令 sysctl -w vm.max_map_count=262144 3、docker和docker-...
实际工作中IK分词器一般都是集成到Solr和Elasticsearch搜索引擎里面使用。 IK分词采用Java编写。 IK分词的效果主要取决于词库,目前自带主词典拥有27万左右的汉语单词量。对于应用领域的不同,需要各类专业词库的...
Elasticsearch-analysis-ik是一个将Lucence IK分词器集成到elasticsearch的ik分词器插件,并且支持自定义的词典。
分布式搜索elasticsearch1.1.0版本 中文分词集成,现在不支持bin/plugin -install medcl/elasticsearch-analysis-ik/1.1.0 版本的安装,直接解压安装ik和mmseg插件,看博文
简单整合,不是spring-data,无api操作示例
Elasticsearch 学习资料集合,elasticsearch集成ik分词器详细文档,elasticsearch+hbase整合步骤,Elasticsearch技术解析与实战
elasticsearch-2.3.1 集成了 ik分词 ansj分词 head
elasticsearch-2.4.6集成IK分词器和pinyin分词器 亲测可以用不懂的可以加WX:amumwt