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