Link Search Menu Expand Document Documentation Menu

标准化器

归一化器的功能类似于分析器,但仅输出一个词元。它不包含分词器,只能包含特定类型的字符和词元过滤器。这些过滤器只能执行字符级操作,例如字符或模式替换,不能对整个词元进行操作。这意味着不支持将词元替换为同义词或词干提取。

归一化器在关键词搜索(即基于词条的查询)中非常有用,因为它允许您对任何给定输入运行词元和字符过滤器。例如,它使得将传入查询 Naïve 与索引词条 naive 进行匹配成为可能。

请看以下示例。

使用自定义归一化器创建新索引

PUT /sample-index
{
  "settings": {
    "analysis": {
      "normalizer": {
        "normalized_keyword": {
          "type": "custom",
          "char_filter": [],
          "filter": [ "asciifolding", "lowercase" ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "approach": {
        "type": "keyword",
        "normalizer": "normalized_keyword"
      }
    }
  }
}

索引文档

POST /sample-index/_doc/
{
  "approach": "naive"
}

以下查询匹配文档。这是预期的。

GET /sample-index/_search
{
  "query": {
    "term": {
      "approach": "naive"
    }
  }
}

但此查询也匹配文档。

GET /sample-index/_search
{
  "query": {
    "term": {
      "approach": "Naïve"
    }
  }
}

要理解原因,请考虑归一化器的作用。

GET /sample-index/_analyze
{
  "normalizer" : "normalized_keyword",
  "text" : "Naïve"
}

在内部,归一化器只接受 NormalizingTokenFilterFactoryNormalizingCharFilterFactory 实例的过滤器。以下是 OpenSearch 核心仓库中模块和插件中兼容过滤器的列表。

common-analysis 模块

此模块无需安装;它默认可用。

字符过滤器:pattern_replace, mapping

词元过滤器:arabic_normalization, asciifolding, bengali_normalization, cjk_width, decimal_digit, elision, german_normalization, hindi_normalization, indic_normalization, lowercase, persian_normalization, scandinavian_folding, scandinavian_normalization, serbian_normalization, sorani_normalization, trim, uppercase

analysis-icu 插件

字符过滤器:icu_normalizer

词元过滤器:icu_normalizer, icu_folding, icu_transform

analysis-kuromoji 插件

字符过滤器:normalize_kanji, normalize_kana

analysis-nori 插件

字符过滤器:normalize_kanji, normalize_kana

这些过滤器列表仅包含 OpenSearch 核心仓库中的附加插件中包含的分析组件。

剩余 350 字符

有问题?

想要贡献?