【Elasticsearch】标准化器(Normalizers)

news/2025/2/21 2:26:18/

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/news/1573201.html

相关文章

python学opencv|读取图像(六十八)使用cv2.Canny()函数实现图像边缘检测

【1】引言 前序学习进程中,在对图像进行边缘识别的基础上,先后进行了边缘轮廓绘制,矩形标注、圆形标注和凸包标注。相关文章包括且不限于: python学opencv|读取图像(六十四)使用cv2.findContours()函数cv…

git如何下载指定版本

要使用Git下载指定版本,可以通过以下步骤进行操作‌: ‌1. 使用Git命令行下载指定版本‌: 1.1 首先,使用git clone命令克隆整个git库到本地。例如:git clone [库的URL]。这将下载最新的代码到本地。‌ 1.2 进入克隆…

无人机飞手培训机构招生宣传技术详解

无人机飞手培训机构招生宣传技术详解如下: 一、行业背景与需求 1. 广泛应用:无人机在航拍、农业、环境监测、地理测绘、电力巡检、公安、交通、救援等多个领域得到广泛应用,对无人机操作员的需求持续增长。 2. 政策推动:政府对…

【区块链】零知识证明基础概念详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 零知识证明基础概念详解引言1. 零知识证明的定义与特性1.1 基本定义1.2 三个核心…

HTML之JavaScript常见事件

HTML之JavaScript常见事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>&…

DeepSeek与ChatGPT:AI语言模型的全面对决

DeepSeek与ChatGPT&#xff1a;AI语言模型的全面对决 引言&#xff1a;AI 语言模型的时代浪潮一、认识 DeepSeek 与 ChatGPT&#xff08;一&#xff09;DeepSeek&#xff1a;国产新星的崛起&#xff08;二&#xff09;ChatGPT&#xff1a;AI 界的开拓者 二、DeepSeek 与 ChatGP…

基于 STM32 的病房监控系统

标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要&#xff1a;本系统采用 STM32 微控制器作为核心&#xff0c;通过传感器实时监测病房内的环境参数&#xff0c;如温度、湿度、光照等&#xff0c;并将数据上传至云端服务器。医护人员可以通过手机或…

rust学习笔记2-rust的包管理工具Cargo使用

首先先解决一个配置文件&#xff0c;目前rust版本升级后&#xff0c;config已经改成 config.toml 内容也做了如下调整 [source.crates-io] replace-with tuna[source.tuna] registry "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" 1.Rust 编程…