
这是悟空的第 90 篇原创文章
来源 | 悟空聊架构(ID:PassJava666)
转载请联系授权(微信ID:PassJava)
Elasticsearch(简称 ES)的搜索引擎内置了很多种分词器,但是对中文分词
不友好,比如搜索悟空哥,是搜不到的,所以我们需要借助第三方中文分词工具包。
悟空哥专门研究了下ik
中文分词工具包该怎么玩,希望对大家有所帮助。
本文主要内容如下:
主要内容
1 ES 中的分词的原理
1.1 ES 的分词器概念
1 | ES 的一个分词器 ( tokenizer ) 接收一个字符流,将其分割为独立的词元 ( tokens ) ,然后输出词元流。 |
1.2 标准分词器原理
1 | 比如 stadard tokenizer 标准分词器,遇到空格进行分词。该分词器还负责记录各个词条 ( term ) 的顺序或 position 位置 ( 用于 phrase 短语和 word proximity 词近邻查询 ) 。每个单词的字符偏移量 ( 用于高亮显示搜索的内容 ) 。 |
1.3 英文和标点符号分词示例
查询示例如下:
1 | POST _analyze{ "analyzer": "standard", "text": "Do you know why I want to study ELK? 2 3 33..."} |
查询结果:
1 | do, you, know, why, i, want, to, study, elk, 2,3,33 |
从查询结果可以看到:
(1)标点符号没有分词。
(2)数字会进行分词。
英文句子分词
1.4 中文分词示例
但是这种分词器对中文的分词支持不友好,会将词语分词为单独的汉字。比如下面的示例会将悟空聊架构
分词为悟
,空
,聊
,架
,构
,期望分词为悟空
,聊
,架构
。
1 | POST _analyze{ "analyzer": "standard", "text": "悟空聊架构"} |
1 |
|
先检查 ES 版本,我安装的版本是7.4.2
,所以我们安装 ik 分词器的版本也选择 7.4.2
http://192.168.56.10:9200/{ “name” : “8448ec5f3312”, “cluster_name” : “elasticsearch”, “cluster_uuid” : “xC72O3nKSjWavYZ-EPt9Gw”, “version” : { “number” : “7.4.2”, “build_flavor” : “default”, “build_type” : “docker”, “build_hash” : “2f90bbf7b93631e52bafb59b3b049cb44ec25e96”, “build_date” : “2019-10-28T20:40:44.881551Z”, “build_snapshot” : false, “lucene_version” : “8.2.0”, “minimum_wire_compatibility_version” : “6.8.0”, “minimum_index_compatibility_version” : “6.0.0-beta1” }, “tagline” : “You Know, for Search”}
1 |
|
解压缩 ik 压缩包
unzip 压缩包
删除下载的压缩包
rm -rf *.zip
2.2.2 方式二:映射文件安装 ik 分词器
进入到映射文件夹
cd /mydata/elasticsearch/plugins
下载安装包
1 |
|
得到如下结果,被分词为 一颗和小星星。
一颗小星星分词结果
再来看下最大组合分词模式
。输入如下查询语句。
1 | POST _analyze{ "analyzer": "ik_max_word", "text": "一颗小星星"} |
1 | 被分成了 6 个词语:一颗、一、颗、小星星、小星、星星。 |
修改这个文件可以通过修改映射文件,文件路径:
/mydata/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml
1 |
|
配置文件内容如下所示:
custom/single_word_low_freq.dic
1 |
|
mydata 目录 里面创建 nginx 目录
mkdir nginx
移动 conf 文件夹到 nginx 映射文件夹
mv conf nginx/
终止并删除原 nginx 容器
docker stop nginxdocker rm <容器 id>
启动新的容器
docker run -p 80:80 –name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -v /mydata/nginx/conf:/etc/nginx -d nginx:1.10
1 |
|
重启 elasticsearch 容器并设置每次重启机器后都启动 elasticsearch 容器。
1 | docker restart elasticsearchdocker update elasticsearch --restart=always |
再次查询分词结果
可以看到
`悟空哥聊架构`
被拆分为
`悟空哥`
、
`聊`
、
`架构`
三个词语,说明自定义词库中的
`悟空哥`
有作用。
终于可以搜到
悟空哥 了~
- END -
写了两本 PDF,
回复
分布式
或
PDF
下
载。
我的 JVM 专栏已上架,回复
JVM
领取
。
人网站:
www.passjava.cn
我是悟空,努力变强,变身超级赛亚人!
本文标题: ES终于可以搜到悟
发布时间: 2024年01月09日 00:00
最后更新: 2025年12月30日 08:54
原始链接: https://haoxiang.eu.org/2b2d92de/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

