文章目录

  • 官方分词器的使用
  • 使用 IK 分词器

官方分词器的使用

使用分词器的格式如下

POST _analyze
{"analyzer": "standard","text": "i am a good-boy"
}

其中 analyzer 参数用来指定分词器,text 位置指定需要分词的语句。

可登录 ES 官方文档-分词器 查看分词器种类,例中使用标准 standard 分词器。

标准分词器将文本划分为单词边界上的术语,如 Unicode 文本分割算法所定义。它删除了大多数标点符号。

分词结果:

{"tokens" : [{"token" : "i","start_offset" : 0,"end_offset" : 1,"type" : "<ALPHANUM>","position" : 0},{"token" : "am","start_offset" : 2,"end_offset" : 4,"type" : "<ALPHANUM>","position" : 1},{"token" : "a","start_offset" : 5,"end_offset" : 6,"type" : "<ALPHANUM>","position" : 2},{"token" : "good","start_offset" : 7,"end_offset" : 11,"type" : "<ALPHANUM>","position" : 3},{"token" : "boy","start_offset" : 12,"end_offset" : 15,"type" : "<ALPHANUM>","position" : 4}]
}

可以看出,分词的结果还比较满意。分词器将该条语句分为不同 token ,每个 token 中包含几个参数。

  • token :分出来的词汇或字符
  • start_offset :当前词汇或字符在本语句的开始偏移量
  • end_offset :当前词汇或字符在本语句的结束偏移量
  • type :当前词汇或字符的类型,例中为 ALPHANUM,字母数字
  • position :当前词汇或字符在整个分词分组里的坐标

再尝试一下标准分词器对中文的分词结果

POST _analyze
{"analyzer": "standard","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}]
}

显然是不合适的

为此,需要为 ES 安装支持中文分词的插件 IK 分词器。

使用 IK 分词器

下载地址 版本跟着 ES 走。

进入 ES 根目录下的 plugins 文件夹,新建一个 ik 文件夹,使用命令下载

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

使用命令解压

unzip elasticsearch-analysis-ik-7.4.2.zip

后重启 ES,可以在根目录下的 bin 目录下执行命令 list 展示当前分词插件

[root@0a45b28f87db bin]# elasticsearch-plugin list
ik

IK 分词器提供两种分词算法 ik_smart 和 ik_max_word,ik_smar为最少切分,ik_max_word最精细度切分。

使用 IK 分词器进行分词

POST _analyze
{"analyzer": "ik_max_word","text": "青山原不老为雪白头"
}

分词结果

{"tokens" : [{"token" : "青山","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "原","start_offset" : 2,"end_offset" : 3,"type" : "CN_CHAR","position" : 1},{"token" : "不老","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 2},{"token" : "为","start_offset" : 5,"end_offset" : 6,"type" : "CN_CHAR","position" : 3},{"token" : "雪白","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 4},{"token" : "白头","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 5}]
}

分词结果还是很理想的,并且其中 token 的 type 也变成了 CN_WORD 和 CN_CHAR。

但是作为一首诗,是否能将上下句分别保留下来呢,即保留上句“青山原不老”和下句“为雪白头”呢,我们需要自定义分词。

在之前创建的 ik 文件夹下 有一个 config 配置文件,该配置文件里包括一些用来分词的字典文件,还有一个 IKAnalyzer.cfg.xml 配置文件,使用 vi 打开


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict"></entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典 --><!--<entry key="remote_ext_dict">远程地址位置  </entry>--><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

这里选择配置一个远程扩展字典。

搭建了 nginx 作为一个 web 服务器,在 nginx 中新建一个 fenci.txt 用来存储词语。在该 txt 文件里增加这两句。

将该 txt 文件地址配置在上述位置。

青山原不老
为雪白头

重新启动 ES ,再次测试,得到结果。

{"tokens" : [{"token" : "青山原不老","start_offset" : 0,"end_offset" : 5,"type" : "CN_WORD","position" : 0},{"token" : "青山","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","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" : 9,"type" : "CN_WORD","position" : 4},{"token" : "雪白","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 5},{"token" : "白头","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 6}]
}

成功

Elasticsearch 实战(四、分词与IK分词器)相关推荐

  1. Elasticsearch入门之从零开始安装ik分词器

    起因 需要在ES中使用聚合进行统计分析,但是聚合字段值为中文,ES的默认分词器对于中文支持非常不友好:会把完整的中文词语拆分为一系列独立的汉字进行聚合,显然这并不是我的初衷.我们来看个实例: POST ...

  2. Elasticsearch - 文档分析,IK分词器;文档冲突(十二)

    阅读本文前可先参考 Elasticsearch - Elasticsearch详解:安装部署(一)_MinggeQingchun的博客-CSDN博客 https://blog.csdn.net/Min ...

  3. 【elasticsearch系列】windows安装IK分词器插件

    环境 github下载:https://github.com/medcl/elasticsearch-analysis-ik/releases 注意,IK分词器插件要与ES版本保持一致: 有的小伙伴在 ...

  4. elasticsearch 的高级检索以及 Ik分词器的配置和使用

    首先准备测试数据 这是测试数据 点击去获取 使用上一篇我们安装的 kibana 将他们批量插入到es中 POST /bank/account/_bulk 数据插入成功之后可以在 psotman 调用 ...

  5. es ik分词热更新MySQL,ElasticSearch(25)- 改IK分词器源码来基于mysql热更新词库

    代码地址 已经修改过的支持定期从数据库中提取新词库,来实现热更新.代码: https://github.com/csy512889371/learndemo/tree/master/elasticse ...

  6. 白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库

    文章目录 概述 ik配置文件 IK自定义词库 自定义词库 Step1 : 新建自定义分词库 Step2 : 添加到ik的配置文件中 Step3 :重启es ,查看分词 自定义停用词库 Step1 : ...

  7. Elasticsearch 之(24)IK分词器配置文件讲解以及自定义词库

    1.ik配置文件 ik配置文件地址:es/plugins/ik/config目录 IKAnalyzer.cfg.xml:用来配置自定义词库 main.dic:ik原生内置的中文词库,总共有27万多条, ...

  8. 【Elasticsearch】一次 排查 iK 分词器 查询慢 分词多 内容大 的问题记录

    1.概述 我的问题如下:1.ES中有1.2亿的数据,有些column是用来做聚合索引,有些是文本字段,用来做查询. 2.而且ES没有做集群,全部数据放在了一台服务器上,内存32G,如今在前端页面上进行 ...

  9. Elasticsearch--高级-分词 安装ik分词---全文检索引擎ElasticSearch工作笔记020

    然后我们再来看一下,es中的分词, 要知道tokenizer就是分词器,然后他会接收一个字符流,然后把字符流分成一个个独立的tokens,词元. 然后把tokens流再输出. 然后我们去看看,官网这个 ...

  10. 给初学者:用VB写外挂 ———— 实战四:雷电3修改器

    代码如下: 窗体: '请保留作者信息: 'ZCSOR于06-10-4开发 'E-MAIL:shaoyan5@163.com Option Explicit Private Sub Form_Load( ...

最新文章

  1. linux怎么卸载webpack,安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc
  2. OpenCV中使用YOLO对象检测
  3. codeforces水题100道 第十六题 Codeforces Round #164 (Div. 2) A. Games (brute force)
  4. Java模拟面试总结
  5. 查看Flink的Job Graph时的问题
  6. 开源Web应用中最常见漏洞是XSS和SQLI漏洞
  7. Spring Boot 学习系列(09)—自定义Bean的顺序加载
  8. Hadoop学习笔记—4.初识MapReduce
  9. LeetCode_617.合并二叉树
  10. H264 介绍[1]
  11. linux降内核版本_ubuntu16.04降级内核版本至3.13.0-85
  12. 服务器突然关机的操作系统日志,一台R410 服务器不定时宕机,系统日志只有“上一次系统是意外关闭”...
  13. 常用Python文件
  14. 通信风口下,App 即将消亡?
  15. python中compile的作用_Python compile函数有什么用?
  16. 智能家居为什么跑不出“独角兽”?
  17. html中3d哪个方向是x轴,详解用CSS绘制3D旋转立方体
  18. 7-6 程序员买西瓜 (5分)
  19. Mac 更改shell(bash 改为zsh)以及附带环境
  20. 用计算机表白的数字,用数字表白的暗语

热门文章

  1. 原创Maya mel系列插件推荐
  2. 52周存钱挑战2.0
  3. 苏轼眼里看到的技术世界(一)
  4. phpstudy和php,phpstudy和wamp哪个好
  5. Dell 电脑插入耳机无声音或重启后有声音
  6. 我为何从开发转测试,并坚持了16年?
  7. BZOJ1857: [Scoi2010]传送带(三分套三分)
  8. 解决努比亚 Z11 mini S 刷机导致 wifi 蓝牙失效的办法
  9. php二维数组声明方式,二维数组怎么定义
  10. U-DIMM、SO-DIMM、FB-DIMM、Reg-DIMM区别