标准化器
归一化器的功能类似于分析器,但仅输出一个词元。它不包含分词器,只能包含特定类型的字符和词元过滤器。这些过滤器只能执行字符级操作,例如字符或模式替换,不能对整个词元进行操作。这意味着不支持将词元替换为同义词或词干提取。
归一化器在关键词搜索(即基于词条的查询)中非常有用,因为它允许您对任何给定输入运行词元和字符过滤器。例如,它使得将传入查询 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"
}
在内部,归一化器只接受 NormalizingTokenFilterFactory 或 NormalizingCharFilterFactory 实例的过滤器。以下是 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 核心仓库中的附加插件中包含的分析组件。