文章目录
- 1、安装 ik 分词器
-
- 1.1 查看版本匹配
- 1.2 下载对应版本的分词器
- 1.3 安装、查看
- 2、测试分词器
-
- 1.1 默认分词器
- 1.2 使用分词器(1)
- 1.3 使用分词器(2)
- 3、自定义词库
-
- 3.1 修改IKAnalyzer.cfg.xml
- 3.2 nginx的设置
- 1.3 测试
- 5、后语
前言
一个 tokenizer(分词器)接收一个字符流,将之分割为独立的 tokens(词元,通常是独立的单词),然后输出 tokens 流。
例如,whitespace tokenizer 遇到空白字符时分割文本。它会将文本 “Quick brown fox!” 分割为 [Quick, brown, fox!]。
该 tokenizer(分词器)还负责记录各个 term(词条)的顺序或 position 位置(用于 phrase 短语和 word proximity 词近邻查询),以及 term(词条)所代表的原始 word(单词)的 start(起始)和 end(结束)的 character offsets(字符偏移量)(用于高亮显示搜索的内容)。
Elasticsearch 提供了很多内置的分词器,可以用来构建 custom analyzers(自定义分词器)。
安装elasticsearch-analysis-ik
分词器需要和elasticsearch
的版本匹配。我第一次安装没有匹配版本就导致分词器不能使用、安装后还报错
1、安装 ik 分词器
1.1 查看版本匹配
这里也有个小坑、我的是elasticsearch
版本是7.17.2 ,然后这个版本也没说8.几
的不能用,第一次装了一个最新的版本;装完后、发现版本不匹配。又重新下载安装了同一个版本的elasticsearch-analysis-ik
版本对应位置:https://github.com/medcl/elasticsearch-analysis-ik/blob/master/README.md
1.2 下载对应版本的分词器
分词器 https://github.com/medcl/elasticsearch-analysis-ik
1.3 安装、查看
直接将文件解压,放入到plugins目录下。如果你进行了目录挂载,就可以在容器外部操作。我这里进行了挂载,只需要将解压后的文件放入到对应挂载目录就可以。
2、测试分词器
1.1 默认分词器
POST _analyze
{
"text": "我是中国人"
}
1.2 使用分词器(1)
POST _analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
1.3 使用分词器(2)
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
提示:能够看出不同的分词器,分词有明显的区别,所以以后定义一个索引不能再使用默认的 mapping 了,要手工建立 mapping, 因为要选择分词器
3、自定义词库
3.1 修改IKAnalyzer.cfg.xml
修改/usr/share/elasticsearch/plugins/ik/config/中的 IKAnalyzer.cfg.xml ,如果进行了目录挂载,只需要在外部对应目录修改就行,我这里的外部挂载目录是:/mydata/elasticsearch/plugins/ik/config
3.2 nginx的设置
首先你要安装了nginx,我这以下操作步骤是基于nginx挂载到外部目录。
需要将这个链接地址放置到IKAnalyzer.cfg.xml
中对应的远程词库目录
1.3 测试
POST _analyze
{
"analyzer": "ik_max_word",
"text": "汪汪队和猪猪对讨论乔碧罗"
}
5、后语
我这里最终的目的是项目中要使用到分词器的使用、不安装不行要执行的语句
我的代码执行结束后、报的是这个索引找不到。所以要创建、创建又需要用到分词器。
##创建一个gulimall_product新的索引
PUT gulimall_product
{
"mappings": {
"properties": {
"attrs": {
"type": "nested",
"properties": {
"attrId": {
"type": "long"
},
"attrName": {
"type": "keyword"
},
"attrValue": {
"type": "keyword"
}
}
},
"brandId": {
"type": "long"
},
"brandImg": {
"type": "keyword"
},
"brandName": {
"type": "keyword"
},
"catalogId": {
"type": "long"
},
"catalogName": {
"type": "keyword"
},
"hasStock": {
"type": "boolean"
},
"hotScore": {
"type": "long"
},
"saleCount": {
"type": "long"
},
"skuId": {
"type": "long"
},
"skuImg": {
"type": "keyword"
},
"skuPrice": {
"type": "keyword"
},
"skuTitle": {
"type": "text",
"analyzer": "ik_smart"
},
"spuId": {
"type": "keyword"
}
}
}
}