elasticsearch 配置ik和拼音分词器 | 张扎瓦的博客

elasticsearch 配置ik和拼音分词器

elasticsearch配置ik和拼音分词器同时生效


下载分词器

大家可以根据自己的elasticsearch 版本下载对应的分词器。

版本一定要下对,否则配置插件时,es启动会报错

本文演示所使用的es版本为6.5.0

安装分词器

es安装分词器非常简单,直接将下载好的分词器解压,放入plugins目录就行,一图胜千言

es插件配置

测试分词器是否正常

es分词器安装后,需要重启,否则插件不生效。

测试ik分词器

ik分词器有两种模式,大家可以自由选择。

ik_max_word

最大化分词,将一句话的所有排列组合全部分词,如图所示

测试ik_max_word

ik_smart

智能分词,分词效果如下所示

测试ik_smart

测试拼音分词器

拼音分词器的分词效果,如图所示

测试拼音分词

开始使用

创建索引

创建索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"index": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": ["my_pinyin"]
}
},
"filter": {
"my_pinyin": {
"type": "pinyin"
}
}
}
}
}

创建mapping

创建mapping

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"engineer": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "text",
"analyzer": "ik_pinyin_analyzer"
},
"job": {
"type": "text",
"analyzer": "ik_pinyin_analyzer"
},
"address": {
"type": "text",
"analyzer": "ik_pinyin_analyzer"
}
}
}
}

插入文档数据

保存文档

为方便测试,插入以下四条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"id": "10001",
"name": "张三",
"job": "java开发工程师",
"address": "北京市中关村"
}

{
"id": "10002",
"name": "李四",
"job": "iOS工程师",
"address": "北京市海淀区中关村e世界"
}

{
"id": "10003",
"name": "王五",
"job": "android工程师",
"address": "山西省太原市高新开发区"
}

{
"id": "10004",
"name": "赵六",
"job": "数据库工程师",
"address": "河北省"
}

查询

使用文字查询

文字查询

返回的查询结果(太长无法截图)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{
"took": 12,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 2.781309,
"hits": [
{
"_index": "test",
"_type": "engineer",
"_id": "et6Fx2wBy2XSSIAAvTdi",
"_score": 2.781309,
"_source": {
"id": "10002",
"name": "李四",
"job": "iOS工程师",
"address": "北京市海淀区中关村e世界"
}
},
{
"_index": "test",
"_type": "engineer",
"_id": "e96Gx2wBy2XSSIAASzcE",
"_score": 2.7094207,
"_source": {
"id": "10003",
"name": "王五",
"job": "android工程师",
"address": "山西省太原市高新开发区"
}
},
{
"_index": "test",
"_type": "engineer",
"_id": "eN6Dx2wBy2XSSIAA4Tfq",
"_score": 1.7647985,
"_source": {
"id": "10001",
"name": "张三",
"job": "java开发工程师",
"address": "北京市中关村"
}
},
{
"_index": "test",
"_type": "engineer",
"_id": "fN6Hx2wBy2XSSIAAJjdC",
"_score": 1.73723,
"_source": {
"id": "10004",
"name": "赵六",
"job": "数据库工程师",
"address": "河北省"
}
}
]
}
}

使用拼音查询

拼音查询

返回的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
"took": 9,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.2686434,
"hits": [
{
"_index": "test",
"_type": "engineer",
"_id": "eN6Dx2wBy2XSSIAA4Tfq",
"_score": 1.2686434,
"_source": {
"id": "10001",
"name": "张三",
"job": "java开发工程师",
"address": "北京市中关村"
}
},
{
"_index": "test",
"_type": "engineer",
"_id": "et6Fx2wBy2XSSIAAvTdi",
"_score": 0.8630462,
"_source": {
"id": "10002",
"name": "李四",
"job": "iOS工程师",
"address": "北京市海淀区中关村e世界"
}
},
{
"_index": "test",
"_type": "engineer",
"_id": "fN6Hx2wBy2XSSIAAJjdC",
"_score": 0.28743857,
"_source": {
"id": "10004",
"name": "赵六",
"job": "数据库工程师",
"address": "河北省"
}
}
]
}
}

配置了拼音分词器后,可以查询到读音相似的文本信息,如输入汉字 一起或者拼音 yiqi,会返回读音都为 yiqi的文本信息,大家可以自行测试。

如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)