【Elastic知识简报】normalizer与analyzer的区别

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

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

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"
        }
      }
    }
  }
}

插入数据

POST test1/_bulk
{"index":{}}
{"name": "THIS is GOOD NEWS","title":"GOOD NEWS"}
{"index":{}}
{"name": "this is good news","title":"good news"}

查询

GET test1/_search
{
  "query": {
    "match": {
      "name.keyword": "THIS IS GOOD NEWS"
    }
  }
}

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

"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

GET test1/_search
{
  "query": {
    "match": {
      "title.keyword": "good news"
    }
  }
}

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

"hits" : [
      {
        "_index" : "test1",
        "_type" : "_doc",
        "_id" : "_OIF9n0BcmNQdWdLpMWX",
        "_score" : 0.6931471,
        "_source" : {
          "name" : "this is good news",
          "title" : "good news"
        }
      }
    ]
目录
相关文章
【Elastic知识简报】: kibana如何开启中文
我们在使用kibana,特别是在设置数据看板时如果英文水平不足,常常会有无法准确设置图形、指标的问题,那么如何将kibana设置为中文界面呢
1650 0
【Elastic知识简报】: kibana如何开启中文
|
SQL 存储 自然语言处理
ES 在舆情搜索中的实践- Elastic Stack 实战手册
网络舆情监测,主要是利用互联网信息采集技术,以及自然语言处理等智能信息处理技术,通过对互联网公开数据进行自动化抓取,然后对信息进行结构化、自动分类、文本聚类、主题发现与跟踪等,提供信息检索、多维度统计、敏感信息预警、信息简报、自动化报告等功能,帮助用户及时发现危害品牌形象的观点,并为用户分析关注对象在网络中的形象提供依据。
1248 0
ES 在舆情搜索中的实践- Elastic Stack 实战手册
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (3)
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (3)
130 0
|
运维 前端开发 Devops
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (4)
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (4)
148 0
|
数据采集 存储 搜索推荐
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (1)
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (1)
269 0
|
存储 搜索推荐
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (2)
带你读《Elastic Stack 实战手册》之4:——3.2.1.企业搜索 (2)
113 0
|
JSON 数据格式
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(15)
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(15)
125 0
|
缓存 索引
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(4)
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(4)
102 0
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(6)
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(6)
|
JSON Apache 数据格式
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(8)
带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(8)