elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字。所以我们引入 es 插件 es-ik。同时为了提升用户体验,引入 es-pinyin 插件。本文介绍这两个 es 插件的安装。

环境

本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。

ik 分词器 和 pinyin 分词器在 github 仓库可以找到,注意版本与 elasticsearch 的版本需要对应,本文使用 5.5.3 版本

如果 elasticsearch 与我的版本不同,可以去官方 github 对应的仓库查看对应版本的 ik 以及 pinyin 分词器。

系列文章

安装 ik 分词器

前文中,我们已经安装了 elasticsearch,我们在其基础上安装分词器

cd /usr/local/es/

## 下载 ik 分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.3/elasticsearch-analysis-ik-5.5.3.zip ## 使用 unzip 解压
## 如果未安装,通过 yum instal unzip 进行安装
unzip elasticsearch-analysis-ik-5.5.3.zip ## 在 elasticsearch 安装目录下的 plugins 文件夹下创建 ik 目录
mkdir /usr/local/es/master/plugins/ik ## 将解压后的 ik 目录下的所有文件移动到 /usr/local/es/master/plugins/ik/
mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/ik/ ## 重启 elasticsearch 或启动 master elasticsearch
## 注意启动时,需要切换到 esuser 用户 ## 启动成功后,日志里会打印此行
[2018-09-02T06:33:43,703][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-ik]

验证 ik 分词器是否生效

打开 Restlet Client 或者 postman 工具

GET http://192.168.199.192:9200/_analyze?analyzer=ik_smart&text="中华人民共和国国歌"

移除名为 ik 的analyzer和tokenizer,请分别使用 ik_smart 和 ik_max_word

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

这里 analyzer 可以指定分词类型,发送请求返回结果:

{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 1,
"end_offset": 8,
"type": "CN_WORD",
"position": 0
},
{
"token": "国歌",
"start_offset": 8,
"end_offset": 10,
"type": "CN_WORD",
"position": 1
}
]
}

我这里指定的 analyzer 为 ik_smart,即粗粒度分词,可以看到 ik 分词器已经生效了。接下来继续安装 pinyin 分词器。

安装 pinyin 分词器

cd /usr/local/es/

## 下载 pinyin 分词器
wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v5.5.3/elasticsearch-analysis-pinyin-5.5.3.zip ## 使用 unzip 解压
## 如果未安装,通过 yum instal unzip 进行安装
unzip elasticsearch-analysis-pinyin-5.5.3.zip ## 在 elasticsearch 安装目录下的 plugins 文件夹下创建 pinyin 目录
mkdir /usr/local/es/master/plugins/pinyin ## 将解压后的 ik 目录下的所有文件移动到 /usr/local/es/master/plugins/pinyin/
mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/pinyin/ ## 重启 elasticsearch 或启动 master elasticsearch
## 注意启动时,需要切换到 esuser 用户 ## 启动成功后,日志里打印
[2018-09-02T07:04:56,203][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-ik]
[2018-09-02T07:04:56,203][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-pinyin]

验证 pinyin 分词器是否生效

打开 Restlet Client 或者 postman 工具

GET http://192.168.199.192:9200/_analyze?analyzer=pinyin&text="李小龙"

这里 analyzer 可以指定分词为 pinyin,发送请求返回结果:

{
"tokens": [
{
"token": "li",
"start_offset": 1,
"end_offset": 2,
"type": "word",
"position": 0
},
{
"token": "xiao",
"start_offset": 2,
"end_offset": 3,
"type": "word",
"position": 1
},
{
"token": "long",
"start_offset": 3,
"end_offset": 4,
"type": "word",
"position": 2
},
{
"token": "lxl",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 2
}
]
}

观察结果,说明 pinyin 分词器也已经生效了。

集群其他节点分词器安装

现在只对 master 进行了安装,其他 slave 也需要安装,这里可以通过拷贝的方式直接来完成安装了。

cp -r master/plugins/ slave1/

cp -r master/plugins/ slave2/

如果其他节点在不同服务器上,通过 scp 命令拷贝即可。

有疑问?

欢迎来信,给我写信

参考

和我一起打造个简单搜索之IK分词以及拼音分词的更多相关文章

  1. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  2. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  3. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  4. 和我一起打造个简单搜索之ElasticSearch集群搭建

    我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...

  5. 和我一起打造个简单搜索之ElasticSearch入门

    本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳 ...

  6. Elasticsearch拼音分词和IK分词的安装及使用

    一.Es插件配置及下载 1.IK分词器的下载安装 关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器.做ES开发的,中文分词十有八九使用的都是IK分词器. ...

  7. 【杂记】docker搭建ELK 集群6.4.0版本 + elasticsearch-head IK分词器与拼音分词器整合

    大佬博客地址:https://blog.csdn.net/supermao1013/article/category/8269552 docker elasticsearch 集群启动命令 docke ...

  8. es简单打造站内搜索

    最近挺忙的,在外出差,又同时干两个项目.白天一个晚上一个,特别是白天做的项目,马上就要上线了,在客户这里 三天两头开会,问题很多真的很想好好静下来怼代码,半夜做梦都能fix bugs~ 和客户交流真的 ...

  9. 我的搜索优化记录(一):中文分词优化IK Analyzer

    搜索绝对不仅仅是搭起框架,跑出结果就完成的工作,之后分词.排序等等的优化才是重头戏. 先交代下背景:这个搜索是我一个人负责搭建并优化的项目,主要索引对象为歌曲.歌手MV等等. 使用技术:Lucene. ...

随机推荐

  1. Solidity的地址 数组如何判断是否包含一个给定的地址?

    Q: given address[] wallets. What is the correct method to check that the list contains a given addre ...

  2. osg探究补充:osg数据加载原理(插件机制简介)

    前言 我们接着昨天的继续,昨天主要是讲解了DatabasePager类中的特定的成员变量以及run函数的第一部分,对所要请求加载的数据按照是否是网络数据进行分类加载模式.今天我们就看看数据是怎们加载到 ...

  3. day3-selenium的使用及

    如果是python2的情况下需要设置: # _*_ coding:utf-8 _*_,这样的编码来保证输入中文在运行时不会报错,另外在中文的前边加上u保证编译时不会报错 from selenium i ...

  4. AX_UserInfo

    UserInfoHelp::userInUserGroup(curuserid(), "Admin")  EmplTable::userId2EmplId(curuserid()) ...

  5. Hbase 性能改进

    第一种性能改进方式:

  6. 1.4eigen中的块运算

    1.4 块运算 块是矩阵或数组的一个矩形部分.块表达式既可以做左值也可以作右值.和矩阵表达式一样,块分解具有零运行时间成本,对你的程序进行优化. 1.使用块运算 最常用的块运算是.block()成员函 ...

  7. Office365 Manager Plus之报表

    Office365 Manager Plus之报表 也许您刚刚开始使用Office 365,对它的各个组件还有很多疑问,如何快速掌握Office 365各种服务的用法?如何管理邮箱?如何监控邮件流量? ...

  8. Django同步数据库(/manage.py makemigrations) 报错

    新起了环境,创建models.py 内容,想要同步到数据库,执行以下操作时 报错: ./manage.py makemigrations ./manage.py migrate *(第一个步骤为在该项 ...

  9. SQL Server CTE 递归查询全解 -- 转 学习

    在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例 ...

  10. C# 多线程 举例使用

    使用多线程的几种方式 (1)不需要传递参数,也不需要返回参数 ThreadStart是一个委托,这个委托的定义为void ThreadStart(),没有参数与返回值.   /// <summa ...