当前位置: 首页 > article >正文

【Elasticsearch】标准化器(Normalizers)

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.kler.cn/a/545288.html

相关文章:

  • Excel文件的读取
  • 【工业场景】用YOLOv8实现火灾识别
  • Windows软件自动化利器:pywinauto python
  • python 大数据的优势
  • vscode插件Remote - SSH使用教程
  • postman登录cookie设置
  • 什么是HTTP Error 429以及如何修复
  • 19.4.9 数据库方式操作Excel
  • 2025 年 1 月区块链游戏研报:市场指标下滑,平台竞争加剧
  • 简单了解低代码Low Code
  • 最新消息 | 德思特荣获中国创新创业大赛暨广州科技创新创业大赛三等奖!
  • 【Antv G2 5.x】饼图添加点击事件,获取当前坐标数据
  • 旅游全域体验系统(源码+文档+部署+讲解)
  • 哈希表-两个数的交集
  • 利用Java爬虫按图搜索1688商品(拍立淘):实战案例指南
  • MySQL统计指定表中各字段的空值、空字符串或零值比例
  • 面试经典150题——堆
  • 科技之光闪耀江城:2025武汉国际半导体产业与电子技术博览会5月15日盛大开幕
  • Django开发入门 – 3.用Django创建一个Web项目
  • git: 如何查询某个文件或者某个目录的更新历史