分词
分词是ES的全文检索的核心
一个tokenizer (分词器)接收一个字符流,将之分割为独立的tokens (词元,通常是独立的单词) ,然后输出tokens流。
例如, whitespace tokenizer遇到空白字符时分割文本。它会将文本"Quick brown fox!"分割AAN为[Quick, brown, fox!]
tokenizer (分词器)还负责记录各个term (词条)的顺序或position位置(用于phrase短语和word proximity词近邻查询) ,
以及term (词条)所代表的原始word (单词)的start该tokes(起始)和end (结束)的character offsets (字符偏移量) (用于高亮显示搜索的内容)Elasticsearch提供了很多内置的分词器,可以用来构建custom analyzers (自定义分词器) 。
先来看看官网的的写法
ES官网
所有语言的默认使用的就是这个标准分词器
POST _analyze
{
"analyzer":"standard",
"text":"The 2 QUICK Brown-Foxes jumped over the lazy dog's bone"
}
这是使用空格来区分的,这样的分词器还不能满足实际的业务场景,ES中的这些分词器都只对英文比较友好,而对于我们中文却不怎么友好!所以作为一个中国的程序员,挺不容器的,外国人写代码就是想写日记,我们中国人写代码就是高考英语作文!,所以这里我们要满足中文的业务需求就需要而外安装中文分词器!这里使用ik分词器
ik分词器
IK分词器
1.GitHub上找到IK分词器的版本
2.进入源码
3.安装ik分词器
这里有两种方式可以安装
1.进入docker容器里面直接wget下载在
2.在外部挂载目录安装
第一种容器内部安装
1.进入ES容器
docker exec -it 069d /bin/bash
2.进入到plugins目录
3.使用wget命令拉取压缩包
我的ES安装是在外部有挂载目录,所以这里就使用第二种方式外部挂载+重启的方式安装ik分词器
第二种外部挂载目录安装
1.将下载的源码zip的压缩包放到挂载的plugins目录
2.解压
这里是宿主机挂载的目录,所以容器里面的的plugins目录中也会存在同样的目录
3.重命名文件夹名,并修改权限可读可写可执行
chmod -R 777 ik-7.4.2/
4.进入docker的ES容器
5.查看ik分词器有没有安装上
进入到ES容器的bin目录
查看插件
elasticsearch-plugin list
这里可能会报错
这里是由于zpi的压缩包没有删除导致这里报错的,删除即可
再次运行上个命令
6.退出容器重启ES容器
docker restart es
4.测试ik分词器
ik_smart-智能分词
POST _analyze
{
"analyzer":"ik_smart",
"text":"测试ik
ik_max_word-最大分词
POST _analyze
{
"analyzer":"ik_max_word",
"text":"测试ik分词器"
}
这里是找到最大的分词组合