normalizer与analyzer的区别

本文最后更新于:2022年8月3日 晚上

1.区别
normalizer与analyzer的作用类似,都是对字段进行处理,但是不同之处在于normalizer不会对字段进行分词,也就是说normalizer没有tokenizer。

所以normalizer是作用于keyword类型的字段的,相当于我们需要给keyword类型字段做一个额外的处理时,比如转换为小写时就可以用到normalizer

2.除了keyword类型,其他类型字段能设置normalizer吗?
不能

3.给keyword类型字段设置了analyzer,该字段会分词吗?
不会,实际上keyword类型是不能设置analyzer的,该类型下没有这个属性,强行设置会直接报错

4.normalizer也会作用到查询词上
当查询设置了normalizer属性的keyword类型字段时,其normalizer也会作用到查询词上

下面我们通过一个实验来证明这一点,同时也通过这个设置来体会normalizer与analyzer用法上的互通性:
设置mappings

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
PUT test1
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "my_analyzer",
"fields": {
"keyword": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
},
"title": {
"type": "text",
"analyzer": "standard",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
},
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"filter": ["lowercase"],
"char_filter": []
}
},
"analyzer": {
"my_analyzer": {
"filter": ["lowercase"],
"tokenizer": "standard"
}
}
}
}
}

插入数据

1
2
3
4
5
POST test1/_bulk
{"index":{}}
{"name": "THIS is GOOD NEWS","title":"GOOD NEWS"}
{"index":{}}
{"name": "this is good news","title":"good news"}

查询

1
2
3
4
5
6
7
8
GET test1/_search
{
"query": {
"match": {
"name.keyword": "THIS IS GOOD NEWS"
}
}
}

执行结果:
会发现将两条数据都查询出来了,因为我们在name.keyword上设置了normalizer(转换小写),源数据中的name.keyword数据被转换为了小写,同时查询词也会被转换为小写,所有都为小写时自然将结果查询出来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
"hits" : [
{
"_index" : "test1",
"_type" : "_doc",
"_id" : "--IF9n0BcmNQdWdLpMWX",
"_score" : 0.18232156,
"_source" : {
"name" : "THIS is GOOD NEWS",
"title" : "GOOD NEWS"
}
},
{
"_index" : "test1",
"_type" : "_doc",
"_id" : "_OIF9n0BcmNQdWdLpMWX",
"_score" : 0.18232156,
"_source" : {
"name" : "this is good news",
"title" : "good news"
}
}
]
}

查询2

1
2
3
4
5
6
7
8
GET test1/_search
{
"query": {
"match": {
"title.keyword": "good news"
}
}
}

结果:
在title.keyword上没有设置normalizer,所以只能查询到小写的结果

1
2
3
4
5
6
7
8
9
10
11
12
"hits" : [
{
"_index" : "test1",
"_type" : "_doc",
"_id" : "_OIF9n0BcmNQdWdLpMWX",
"_score" : 0.6931471,
"_source" : {
"name" : "this is good news",
"title" : "good news"
}
}
]

————————————————
版权声明:本文为CSDN博主「wu_55555」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_24950043/article/details/122157226


normalizer与analyzer的区别
https://blog.m2c.top/normalizer-vs-analyzer.html
作者
Jeffery
发布于
2022年8月3日
许可协议