elasticsearch对英文会拆成单个单词,对中文会拆分成单个字。下面来看看是不是这样。

首先测试一下英文:

GET /blog/_analyze
{"text": "Installation and Upgrade Guide"
}

返回结果如下:

{"tokens": [{"token": "installation","start_offset": 0,"end_offset": 12,"type": "<ALPHANUM>","position": 0},{"token": "and","start_offset": 13,"end_offset": 16,"type": "<ALPHANUM>","position": 1},{"token": "upgrade","start_offset": 17,"end_offset": 24,"type": "<ALPHANUM>","position": 2},{"token": "guide","start_offset": 25,"end_offset": 30,"type": "<ALPHANUM>","position": 3}]
}

接下来测试一下中文:

GET /blog/_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},{"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},{"token": "国","start_offset": 13,"end_offset": 14,"type": "<IDEOGRAPHIC>","position": 13}]
}

为了能够对中文进行更好的分词,我们需要安装第三方的分词插件,目前比较成熟的是ik(elasticsearch-analysis-ik),官方地址:https://github.com/medcl/elasticsearch-analysis-ik。

安装方式

方式一:到这里下载已编译好的包,解压到elasticsearch安装根目录下的plugins文件夹。

方式二:elasticsearch 版本在5.5.1以上,可以使用 elasticsearch-plugin 安装,方式如下:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.3/elasticsearch-analysis-ik-6.2.3.zip

方式三:elasticsearch-analysis-ik是用maven构建的java项目,和打包自己写的java程序没啥区别。所以只需下载代码到本地,使用 mvn package打包后,解压到elasticsearch安装根目录下的plugins文件夹下即可。

注意,安装好后,记得重启elasticsearch。安装好后大概就是下面这样子。

测试安装是否成功

ik分词有两种分词方式:ik_max_word 和 ik_smart ,区别在于:
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
下面我们再来测试一把:

GET /blog/_analyze
{"text": "加媒称美军利用威克岛遏制中国","analyzer": "ik_max_word"
}

返回结果如下:

{"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": 3,"type": "CN_CHAR","position": 2},{"token": "美军","start_offset": 3,"end_offset": 5,"type": "CN_WORD","position": 3},{"token": "利用","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 4},{"token": "威","start_offset": 7,"end_offset": 8,"type": "CN_CHAR","position": 5},{"token": "克","start_offset": 8,"end_offset": 9,"type": "CN_CHAR","position": 6},{"token": "岛","start_offset": 9,"end_offset": 10,"type": "CN_CHAR","position": 7},{"token": "遏制","start_offset": 10,"end_offset": 12,"type": "CN_WORD","position": 8},{"token": "中国","start_offset": 12,"end_offset": 14,"type": "CN_WORD","position": 9}]
}

从上面的返回结果来看,分词插件就安装成功了。下面简单举个例子:

1、创建index和mapping,并指定title字段使用ik_max_word方式进行分词

PUT /blog
{"mappings": {"news": {"properties": {"title": {"type": "text","analyzer": "ik_max_word"}}}}
}

2、添加一些数据,最好有点关联,这样搜索才能看到效果:

POST /blog/news/_bulk?pretty
{"index":{"_id":"1"}}
{"title": "台退将警告台当局:美国把台湾当筹码 想玩你!" }
{"index":{"_id":"2"}}
{"title":"美媒:中国以前遭美污蔑走防守路线 现在战斗力太强"}
{"index":{"_id":"4"}}
{"title":"美国在南海设“红线”和炮舰政策 不会吓倒中国"}
{"index":{"_id":"5"}}
{"title":"美媒:美国想单方面遏制中国?结果可能很惨"}
{"index":{"_id":"6"}}
{"title":"美媒炒作俄可能“割光缆” 担心俄或借此反制西方"}
{"index":{"_id":"7"}}
{"title":"金一南:逼中国与俄罗斯结盟 将是西方最大灾难!"}
{"index":{"_id":"8"}}
{"title":"旧战场焕发新生?加媒称美军利用威克岛遏制中国"}

3、接着,我们来搜索一把

GET /blog/news/_search
{"query": { "match": { "title": "结果可能很惨" } }
}

返回结果如下:

{"took": 12,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 2,"max_score": 2.1470046,"hits": [{"_index": "blog","_type": "news","_id": "5","_score": 2.1470046,"_source": {"title": "美媒:美国想单方面遏制中国?结果可能很惨"}},{"_index": "blog","_type": "news","_id": "6","_score": 0.99096406,"_source": {"title": "美媒炒作俄可能“割光缆” 担心俄或借此反制西方"}}]}
}

字典配置

ik配置文件位于config文件夹中,具体位置就像下面这样。

  1. IKAnalyzer.cfg.xml:用来配置自定义词库
  2. main.dic:ik原生内置的中文词库,总共有27万多条,只要是这些词语,都会被分在一起
  3. quantifier.dic:放了一些计量单位相关的词
  4. suffix.dic:放了一些后缀
  5. surname.dic:中国的姓氏
  6. stopword.dic:英文停用词,会在分词的时候,直接被忽略,不会建立在倒排索引中

自定义词库

可能在ik的原生词典里,对一些新生的流行语并没有,比如尬聊、蓝瘦香菇、中二病、斜杠青年。那么就需要我们自己建立词库了。

在IKAnalyzer.cfg.xml配置文件中,配置我们自定义字典的路径。

在mydict.dic文件中写入想要扩展的词语:

重启elasticsearch,测试一下生效否:

GET /blog/_analyze
{"text": "蓝瘦香菇","analyzer": "ik_max_word"
}

返回结果如下:

{"tokens": [{"token": "蓝瘦香菇","start_offset": 0,"end_offset": 4,"type": "CN_WORD","position": 0},{"token": "香菇","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1}]
}

可见,我们扩展的词语生效了。

热更新 IK 分词使用方法

每次都是在elasticsearch的扩展词典中,手动添加新词语,弊端很多,比如:

  • 每次添加完,都要重启es才能生效,非常麻烦
  • es是分布式的,可能有数百个节点,总不能每次都一个一个节点上面去修改

热更新就是不需要elasticsearch重启,直接我们在外部某个地方添加新的词语,elasticsearch中立即热加载到这些新词语。

具体方式直接看官方这里吧。

转载于:https://www.cnblogs.com/ginb/p/8708596.html

elasticsearch之分词插件使用相关推荐

  1. Elasticsearch拼音分词插件安装和使用

    1.下载拼音分词插件,要和安装的es版本保持一致,我的版本是7.9.3 插件源码地址:https://github.com/medcl/elasticsearch-analysis-pinyin 但是 ...

  2. Elasticsearch拼音分词插件安装

    Elastic的Medcl提供了一种搜索Pinyin搜索的方法.拼音搜索在很多的应用场景中都有被用到.比如在百度搜索中,我们使用拼音就可以出现汉字: 对于我们中国人来说,拼音搜索也是非常直接的.那么在 ...

  3. elasticsearch ik分词插件配置自定义分词词典

  4. Elasticsearch学习笔记(三)安装hanlp中文分词插件及同义词配置

    目录 hanlp分词插件 插件安装 在线安装 离线安装 安装数据包 同义词配置 hanlp分词插件 HanLP是一款免费开源(Apache License 2.0协议)中文语义分词工具,它提供中文分词 ...

  5. [Spring Boot]12 ElasticSearch实现分词搜索功能

    目录 一.前言 二.搜索功能的需求 三.需求开发 1.服务器安装ElasticSearch和IK分词器 2.需求开发 1)pom.xml引入jar包: 2)yml增加配置 3)配置类Elasticse ...

  6. 基于 Ansj 的 elasticsearch 2.3.1 中文分词插件

    前言 这是一个elasticsearch的中文分词插件,基于Ansj中文分词.发起者Onni大神. 2.3.1插件安装 进入Elasticsearch目录运行如下命令 进入es目录执行如下命令 ./b ...

  7. [Elasticsearch](五)Docker环境下搭建Elasticsearch,Elasticsearch集群,Elasticsearch-Head以及IK分词插件和拼音分词插件

    目录: https://github.com/dolyw/ProjectStudy/tree/master/Elasticsearch DockerStudy dolyw:https://note.d ...

  8. 【java】将LAC改造成Elasticsearch分词插件

    目录 为什么要将LAC改造成ES插件? 怎么将LAC改造成ES插件? 确认LAC java接口能work 搭建ES插件开发调试环境 编写插件 生成插件 安装.运行插件 linux版本的动态链接库生成 ...

  9. Elasticsearch如何修改拼音分词插件支持音调搜索

    背景 es默认加载的拼音分词插件是不支持音调搜索的,如何修改插件使得它支持音调搜索?又或者多音字你想要默认的读音是另外一个,例如曾默认读音是ceng,我想修改其默认读音为zeng. 下载拼音分词插件代 ...

最新文章

  1. 交互式多模型_DeepFaceLab824版 Avatar换头模型尝鲜!
  2. ZooKeeper的一致性算法赏析
  3. tor screenrec屏幕录制+_ScreenFlow for mac(屏幕录制软件) v8.2.4中文版
  4. SpringMVC拦截器-用户登录权限控制代码实现1
  5. 特殊类型窗体制作: 用C#实现启动欢迎界面
  6. sh.k7p.work/index.php,Laowang's Blogs
  7. Linux学习之diction的编译与使用
  8. ttc文件linux安装,centos系统安装中文字体几种方法
  9. 【iCore4 双核心板_ARM】例程十八:USBD_VCP实验——虚拟串口
  10. mingw gcc mysql_Windows平台mingw编译器 mysql
  11. chrome多版本共存
  12. 【C 语言】文件操作 ( fseek 函数 )
  13. JAVA毕设项目教务排课系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  14. DeepChem手册3.10 MoleculeNet
  15. Pymol获得蛋白中二级结构信息
  16. 经典按键算法使用心得
  17. OSM地图本地发布(三)-----自定义图层提取
  18. k型热电偶分度表_热电偶补偿导线
  19. windows10 自带拼音输入法,简繁体切换快捷键怎么设置?
  20. 微信联系人右侧字母滑动索引

热门文章

  1. 与君欢喜城 暖色度余生
  2. 树叶贴画机器人_多图:人和街小学科技节启幕 投石机、机器人每样都“吸睛”...
  3. 微信小程序web-view实现蒙版
  4. quickGO:在线查询GO和GO注释信息的网站
  5. html的cookie查看器,谷歌Cookies查看工具
  6. weakauras教程_简单的WeakAuras2教程 基础功能设置指南(2)
  7. 100 道 JavaScript 面试题及答案
  8. SQL语句中的auto_increment=1是什么意思?
  9. Elon Musk (伊隆·马斯克):无限的创想与意志的胜利
  10. 酿酒过程-你知道白酒的辣味是什么引起的吗?