您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
elasticSearch规范化器及为索引配置自定义规范器
发布时间:2021-09-11 15:10:43编辑:雪饮阅读()
规范化器
规范器类似于分析器,不同之处在于它们没有分词器,只接受可用字符过滤器和标记过滤器的子集。仅允许基于每个字符工作的过滤器。例如,允许使用小写过滤器,但不允许使用词干过滤器,它需要将关键字作为一个整体来查看。当前可以在规范化器中使用的过滤器列表如下:arabic_normalization、asciifolding、bengali_normalization、 cjk_width、decimal_digit、elision、german_normalization、 hindi_normalization、indic_normalization、lowercase、 persian_normalization、scandinavian_folding、serbian_normalization、 sorani_normalization、uppercase。
Elasticsearch 附带一个lowercase内置的规范化器。对于其他形式的规范化,需要自定义配置。
自定义规范器
在索引种自定义规范器采用 字符过滤器列表和标记过滤器列表 。
那么一个自定义规范器如:
请求正文:
{
"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"
}
}
}
}
响应正文:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "index"
}
这里定义了一个规范器:
该规范器中字符过滤器子集中仅包含了一个同样是在这里自定义的quote(这里自定义字符过滤器quote实现了字符«和字符»都替换为字符\")字符过滤器
该规范器中标记过滤器中有包含了两个内置的过滤器lowercase(用来实现术小写)、asciifolding(将ASCII码不在ASCII表前127内的字母、数字和Unicode符号转换为ASCII等效字符(如果存在的话))。
然后将上面这个自定义规范器应用在映射字段foo字段上了。
那么接下来测试这个自定义规范器是否按照预期工作了。
请求正文:
{
"field": "foo",
"text": "« Pal7 » è un gioco domestico "
}
响应正文:
{
"tokens": [
{
"token": "\" pal7 \" e un gioco domestico ",
"start_offset": 0,
"end_offset": 30,
"type": "word",
"position": 0
}
]
}
那么可以看到« Pal7 »变成了\" pal7 \",就实现了lowercase标记过滤器及自定义的quote字符过滤器。è变成了e就是实现了asciifolding标记器。
那么最后的令牌列表仅仅只有一个令牌,这是因为规范器是将关键字作为一个整体来查看的。只对关键词句整体进行处理。
关键字词:elasticSearch,规范化器,规范器,自定义,索引,custom