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,我们在其基础上安装分词器

  1. cd /usr/local/es/
  2. ## 下载 ik 分词器
  3. wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.3/elasticsearch-analysis-ik-5.5.3.zip
  4. ## 使用 unzip 解压
  5. ## 如果未安装,通过 yum instal unzip 进行安装
  6. unzip elasticsearch-analysis-ik-5.5.3.zip
  7. ## 在 elasticsearch 安装目录下的 plugins 文件夹下创建 ik 目录
  8. mkdir /usr/local/es/master/plugins/ik
  9. ## 将解压后的 ik 目录下的所有文件移动到 /usr/local/es/master/plugins/ik/
  10. mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/ik/
  11. ## 重启 elasticsearch 或启动 master elasticsearch
  12. ## 注意启动时,需要切换到 esuser 用户
  13. ## 启动成功后,日志里会打印此行
  14. [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 可以指定分词类型,发送请求返回结果:

  1. {
  2. "tokens": [
  3. {
  4. "token": "中华人民共和国",
  5. "start_offset": 1,
  6. "end_offset": 8,
  7. "type": "CN_WORD",
  8. "position": 0
  9. },
  10. {
  11. "token": "国歌",
  12. "start_offset": 8,
  13. "end_offset": 10,
  14. "type": "CN_WORD",
  15. "position": 1
  16. }
  17. ]
  18. }

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

安装 pinyin 分词器

  1. cd /usr/local/es/
  2. ## 下载 pinyin 分词器
  3. wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v5.5.3/elasticsearch-analysis-pinyin-5.5.3.zip
  4. ## 使用 unzip 解压
  5. ## 如果未安装,通过 yum instal unzip 进行安装
  6. unzip elasticsearch-analysis-pinyin-5.5.3.zip
  7. ## 在 elasticsearch 安装目录下的 plugins 文件夹下创建 pinyin 目录
  8. mkdir /usr/local/es/master/plugins/pinyin
  9. ## 将解压后的 ik 目录下的所有文件移动到 /usr/local/es/master/plugins/pinyin/
  10. mv /usr/local/es/elasticsearch/* /usr/local/es/master/plugins/pinyin/
  11. ## 重启 elasticsearch 或启动 master elasticsearch
  12. ## 注意启动时,需要切换到 esuser 用户
  13. ## 启动成功后,日志里打印
  14. [2018-09-02T07:04:56,203][INFO ][o.e.p.PluginsService ] [master] loaded plugin [analysis-ik]
  15. [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,发送请求返回结果:

  1. {
  2. "tokens": [
  3. {
  4. "token": "li",
  5. "start_offset": 1,
  6. "end_offset": 2,
  7. "type": "word",
  8. "position": 0
  9. },
  10. {
  11. "token": "xiao",
  12. "start_offset": 2,
  13. "end_offset": 3,
  14. "type": "word",
  15. "position": 1
  16. },
  17. {
  18. "token": "long",
  19. "start_offset": 3,
  20. "end_offset": 4,
  21. "type": "word",
  22. "position": 2
  23. },
  24. {
  25. "token": "lxl",
  26. "start_offset": 0,
  27. "end_offset": 3,
  28. "type": "word",
  29. "position": 2
  30. }
  31. ]
  32. }

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

集群其他节点分词器安装

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

  1. cp -r master/plugins/ slave1/
  2. 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. gd_t , bd_t 结构分析

    在分析板级初始化函数board_init_f 和 board_init_r 之前,先来看一下在uboot中颇为重要的 gd_t, bd_t 结构 bd_t 所对应的定义bd_info 在 arch/a ...

  2. 3.Redis高级功能

    3.Redis高级功能3.1 慢查询分析3.1.1 慢查询的两个配置参数3.1.2 最佳实践3.1.3 单线程架构3.2 Redis Shell3.2.1 redis-cli 详解3.2.2 redi ...

  3. Android通过手机搭建服务器,WIFI建立热点实现C/S聊天室通信功能

    应用效果图:                                                客户端                                            ...

  4. 谷歌开源的一个BTREE实现 Go语言

    // Copyright 2014 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "Licens ...

  5. [f]计时器

    // 计时器 function Timer(ele) { this._mStr = ''; this._sStr = ''; this._m = 0; this._s = 0; this._setTi ...

  6. 在Word中插入Excel对象

    using Word = NetOffice.WordApi; Word.Document doc = this._wordApplication.Documents.Add(@"C:\Us ...

  7. 基于ALTERA SOPC设计的概述

    下图是比较传统的系统设计开发板的设备图 由于元器件比较多,成本,复杂性和功耗都比较高,所以需要一种新的方案来降低成本和复杂性. ALTERAL  就提供了一种SOPC解决方案,将系统的I/O.CPU和 ...

  8. c++ 日志输出库 spdlog 简介(2)

    继续上一篇,example.cpp解析. 1.set_pattern 自定义日志格式 官方参考:https://github.com/gabime/spdlog/wiki/3.-Custom-form ...

  9. Interview Common Sample Codes

    1. Quick Sort: int partition(int A[], int p, int r) { int x = A[r]; // Pivot element int i = p - 1; ...

  10. 札记:翻译-使用Scene和Transition实现【场景切换】动画效果

    简述:transitions framework 下面翻译transition为"过渡",强调动画过程的含义,不过更多时候使用transition单词本身. Android 4.4 ...