【Elasticsearch】标准化器(Normalizers)

ops/2025/2/19 13:00:17/

Elasticsearch 的标准化器(Normalizers)是一种特殊的分析器,用于对`keyword`类型字段的文本进行统一的格式化处理。与普通分析器不同,标准化器只能产生单个标记(token),因此它不包含分词器(tokenizer),并且只能使用基于单个字符的过滤器。

标准化器的主要特点

1. 单标记输出:标准化器只能输出一个标记,因此它适用于对整个字段进行统一处理,而不是将字段拆分为多个标记。

2. 字符过滤器和标记过滤器:标准化器可以使用字符过滤器(`char_filter`)和标记过滤器(`filter`),但只能使用基于单个字符的过滤器,例如`lowercase`(小写化)、`asciifolding`(将非 ASCII 字符转换为 ASCII 字符)。

3. 应用场景:标准化器通常用于需要在索引和查询时对字段进行统一格式化的场景,例如去除特殊字符、统一大小写等。

内置标准化器

Elasticsearch 自带了一个名为`lowercase`的内置标准化器,它会将所有字符转换为小写。

自定义标准化器

可以通过在索引的分析设置中定义自定义标准化器。以下是一个自定义标准化器的示例配置:

```json

PUT index

{

  "settings": {

    "analysis": {

      "normalizer": {

        "my_normalizer": {

          "type": "custom",

          "char_filter": [],

          "filter": ["lowercase", "asciifolding"]

        }

      }

    }

  },

  "mappings": {

    "properties": {

      "foo": {

        "type": "keyword",

        "normalizer": "my_normalizer"

      }

    }

  }

}

```

在这个例子中:

• 定义了一个名为`my_normalizer`的自定义标准化器,它使用了`lowercase`和`asciifolding`过滤器。

• 将字段`foo`的类型设置为`keyword`,并指定使用`my_normalizer`进行标准化。

标准化器的应用场景

1. 统一大小写:在搜索时,用户可能输入大写或小写的文本,使用`lowercase`过滤器可以确保索引和查询时的文本大小写一致。

2. 去除特殊字符:通过`asciifolding`过滤器,可以将非 ASCII 字符转换为 ASCII 字符,例如将`é`转换为`e`。

3. 文本格式化:在某些场景下,需要对字段进行统一的格式化处理,例如去除多余的空格或特殊符号。

示例

假设我们有一个字段`foo`,需要在索引和查询时将其内容统一转换为小写并去除特殊字符。我们可以定义一个自定义标准化器`my_normalizer`,并将其应用于`foo`字段。

```json

PUT index

{

  "settings": {

    "analysis": {

      "normalizer": {

        "my_normalizer": {

          "type": "custom",

          "char_filter": [],

          "filter": ["lowercase", "asciifolding"]

        }

      }

    }

  },

  "mappings": {

    "properties": {

      "foo": {

        "type": "keyword",

        "normalizer": "my_normalizer"

      }

    }

  }

}

```

在索引文档时:

```json

PUT index/_doc/1

{

  "foo": "BÀR"

}

```

在查询时:

```json

GET index/_search

{

  "query": {

    "term": {

      "foo": "BAR"

    }

  }

}

```

由于`foo`字段使用了`my_normalizer`,在索引和查询时都会将文本转换为小写并去除特殊字符,因此查询`"BAR"`时可以匹配到索引的`"BÀR"`。

通过合理使用标准化器,可以有效提高搜索的准确性和灵活性,同时减少因文本格式差异导致的搜索问题。


http://www.ppmy.cn/ops/158726.html

相关文章

比较循环与迭代器的性能:Rust 零成本抽象的威力

一、引言 在早期的 I/O 项目中,我们通过对 String 切片的索引和 clone 操作来构造配置结构体,这种方法虽然能确保数据所有权的正确传递,但既显得冗长,又引入了不必要的内存分配。随着对 Rust 迭代器特性的深入了解,我…

07:串口通信(二):收发数据包

1、数据包 我们使用上位机个单片机发送数据包时,规定包头和包尾,将我们需要发送的数据放在中间,数据的长度我们也可以自己规定。一般情况下HEX数据包我们使用固定长度数据包。而文本数据包使用是可变长度数据包。 2、HEX数据包 2.1、HEX固定…

Python练习11-20

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 题目:判断101-200之间有多少…

【C#】条件运算符

1.逻辑与(&&) Console.WriteLine(true && true);//true Console.WriteLine(true && false);//false Console.WriteLine(false && false);//false2.逻辑或(||) Console.WriteLine(true || true);//true Console.WriteLine(true || false);//t…

尚硅谷爬虫note006

一、ajax的get请求 1. ajax的get请求—豆瓣电影第一页 # _*_ coding : utf-8 _*_ # Time : 2025/2/13 15:14 # Author : 20250206-里奥 # File : demo23_ajax的get请求 # Project : PythonProject10-14import urllib.requestfrom demo17_qingqiuduixaingdedingzhi import hea…

OpenVINO 2025.0重磅升级:开启⽣成式AI全场景⾰命!

2025年2⽉6⽇,英特尔OpenVINO™ 2025.0版本震撼发布,本次升级堪称近三年最⼤规模技术⾰新!从⽣成 式AI性能跃升到全栈硬件⽀持,从开发者⼯具链优化到边缘计算突破,六⼤核⼼升级重新定义AI部署效率。 一,&a…

[思考记录.AI]关于Deepseek-r1的思维链

一、“思维链”让大模型更聪明(不是唯一方式) 以前在使用某些AI大模型时,为了获得相对更好的输出,一种方式是在提示词上下功夫——除了交代任务背景,甚至建议对复杂任务预设处理步骤、提供模板案例等。 夸张点说就是&a…

【设计模式】【行为型模式】命令模式(Command)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…