规范化器

edit

Normalizers(规范化器)与分析器类似,但它们只能生成一个单一的标记。因此,它们没有分词器,并且只接受可用字符过滤器和标记过滤器的一个子集。只有那些基于每个字符工作的过滤器是被允许的。例如,一个将字母转换为小写的过滤器是被允许的,但一个需要查看整个关键词的词干提取过滤器则不被允许。当前可以在规范化器定义中使用的过滤器列表包括:arabic_normalization(阿拉伯语规范化)、asciifolding(ASCII折叠)、bengali_normalization(孟加拉语规范化)、cjk_width(CJK宽度)、decimal_digit(十进制数字)、elision(省略)、german_normalization(德语规范化)、hindi_normalization(印地语规范化)、indic_normalization(印度语规范化)、lowercase(小写)、pattern_replace(模式替换)、persian_normalization(波斯语规范化)、scandinavian_folding(斯堪的纳维亚折叠)、serbian_normalization(塞尔维亚语规范化)、sorani_normalization(索拉尼语规范化)、trim(修剪)、uppercase(大写)。

Elasticsearch 自带一个 lowercase 内置规范化器。对于其他形式的规范化,需要自定义配置。

自定义规范化器

edit

自定义规范化器接受一个 字符过滤器列表和一个 词元过滤器列表。

PUT index
{
  "settings": {
    "analysis": {
      "char_filter": {
        "quote": {
          "type": "mapping",
          "mappings": [
            "« => \"",
            "» => \""
          ]
        }
      },
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "char_filter": ["quote"],
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "foo": {
        "type": "keyword",
        "normalizer": "my_normalizer"
      }
    }
  }
}