es的分析器往往包括3个低级构建块包:
- character filters - 字符过滤器,可以添加、删除或更改字符来转换流,一个分析器可有多个字符过滤器;
- tokenizer - 标记器,接受字符流,将其分解成单独的标记,并输出标记流,一个分析器只能有一个标记器;
- token filters - token过滤器,接受token流,并可以添加、删除或修改token,不允许更改每个token的位置或字符偏移量,一个分析器可有多个token过滤器,并按顺序应用。
测试分析器
指定索引引用分析器
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"ik": { //自定义一个名为std_folded的分析器
"type": "custom", //type自定义
"tokenizer": "ik_smart", //指定标记器
"filter": [ //指定字符过滤器
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": { //设置映射
"my_type": {
"properties": {
"my_text": { //指定字段
"type": "text", //设置type,String类型已被废弃,用text或keyword
"analyzer": "ik" //指定分析器为上文定义的自定义分析器
}
}
}
}
}
测试分析器效果
GET my_index/_analyze
{
"analyzer": "std_folded", //按分析器名指定分析器
"text": "这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主" //指定要分析的文本
}
测试字段指定的分析器效果
GET my_index/_analyze
{
"field": "my_text", //参考字段my_text使用的分析器
"text": "这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主"
}
Elasticsearch提供的内置analyzers
Standard Analyzer
标准分析仪按照Unicode文本分段算法的定义,将文本分割成单词边界的分词。它删除了大多数标点符号,小写显示分词,并支持删除stop words。
Simple Analyzer
当遇到不是字母的字符时,简单的分析器会将文本分成条目。小写显示分词。
Whitespace Analyzer
空格分析器遇到任何空格字符时都会将文本分为多个项目。不会把分词转换为小写字母。
Stop Analyzer
停止分析仪和Simple Analyzer类似,但也支持stop words的删除。
Keyword Analyzer
一个“noop”分析器,它可以接受任何给定的文本,并输出完全相同的文本作为一个单词。
Pattern Analyzer
使用正则表达式拆分分词,支持lower-casing和stop words。
Language Analyzers
Elasticsearch提供许多语言特定的分析器,如英语或法语。
Fingerprint Analyzer
一个专门的分析仪,它可以创建一个可用于重复检测的指纹。
网友评论