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. JVM思考-init和clinit区别

    JVM思考-init和clinit区别 目录:JVM总括:目录 clinit和init的区别其实也就是Class对象初始化对象初始化的区别,详情看我上一篇博客: JVM总括四-类加载过程.双亲委派模型 ...

  2. mysql开启调试日志general_log开启跟踪日志

    general_log = 1 general_log_file = /tmp/umail_mysql.log 有时候,不清楚程序执行了什么sql语句,但是又要排除错误,找不到原因的情况下, 可以在m ...

  3. 【APP测试(Android)】--安全测试

  4. HBase Configuration过程

    (2012-10-22 15:56:10) 转载▼      HBase客户端API中,我们看到对HBase的任何操作都需要首先创建HBaseConfiguration类的实 例.为HBaseConf ...

  5. 一不注意,在Unity3D中DllImport 引起的Bug.

    单要说这个Bug是很简单,但是得从头说起. 一些大型的网络游戏,或者加载比较多的一些场景时,如果要等待所有模型,贴图等各种资源文件加载完毕才能执行游戏,对用户将会是一个很头大的事情.所以就需要用到动态 ...

  6. SAS DATA步读取数据

    上面一节讲了SAS的基本概念,以及语法结构,这次主要讲解SAS DATA步读取数据.    1 ·列表输入    2 ·按列输入    3 ·格式化输入  使用DATA步读取数据的基本形式如下: DA ...

  7. jQuery的事件,动画效果等

    一.事件 click(function(){}) 点击事件 hover(function(){})   悬浮事件,这是jQuery封装的,js没有不能绑定事件 focus(function(){}) ...

  8. [solution] JZOJ3493 三角形

    [solution] JZOJ3493 三角形 Description 平面上有n个点,求出用这些点可以构成的三角形数. Input 第一行一个整数n. 接下来n行,每行两个整数,表示点的坐标. Ou ...

  9. 桌面应用开发之WPF动态背景

      因为项目需要,在WPF开发的桌面应用中,登陆页面需使用动态背景.由于没有前端开发人员,所以由半吊子的后端开发人员根据效果图写前端xaml.去掉页面上边框,抽离动态背景设置代码: <Windo ...

  10. 如何将他人的SOPC工程转换为自己可以使用的工程

    上篇文章的程序源码在:http://download.csdn.net/detail/noticeable/9921952 源码错误现象: 在下载源码文件解压后,打开系统工程,可以看到quartus ...