文章目录
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"
}
}
}
}