规范化器
规范化器 的功能类似于分析器,但只输出单个分词。它不包含分词器,并且只能包含特定类型的字符过滤器和分词过滤器。这些过滤器只能执行字符级别的操作,例如字符或模式替换,不能对整个分词进行操作。这意味着不支持将分词替换为同义词或进行词干提取。
规范化器在关键字搜索中很有用(即在基于词项的查询中),因为它允许您对任何给定输入运行分词过滤器和字符过滤器。例如,它使得传入查询 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 实例的过滤器。以下列表是核心 UDB-SX 存储库中模块和插件内找到的兼容过滤器。
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