Analysis 与 Analyzer
- Analysis - 文本分析是把全文本转化为一系列单词(token/term)的过程,也叫分词
- Analysis 是通过 Analyzer 实现的
- 可以使用 elasticsearch 自己内置的,也可以配置第三方的
- 除了在数据写入的时候转换词条,匹配 Query 语句的时候也需要使用相同的分析器进行查询
Analyzer的组成
- 分词器是专门处理分词的组件,由三部分组成
- Character Filters(针对原始文本进行处理,如去除 html)
- Tokenizer(按照规则切分为单词)
- Token Filter(将切分的单词进行加工/小写/删除分割词/增加同义词 )
Elasticsearch 的内置分词器
- Standard Analyzer - 默认分词器,按词切分,小写处理
- Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
- Stop Analyzer - 停用词过滤(the/a/is),小写处理
- Whitespace Analyzer - 按照空格切分,不转小写
- Keyword Analyzer - 不分词,输入即为一个 term 输出
- Patter Analyzer - 正则表达式,默认 \W+(非字符分割)
- Language - 提供30+种常见语言的分词器
- Customer Analyzer - 自定义分词器
使用_analyzer API
- 直接指定 Analyzer 进行测试
GET /_analyze
{
"analyzer": "standard",
"text":"es is nb"
}
得到结果:
{
"tokens" : [
{
"token" : "es",
"start_offset" : 0,
"end_offset" : 2,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "is",
"start_offset" : 3,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "nb",
"start_offset" : 6,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 2
}
]
}
- 指定索引的字段进行测试
POST movies/_analyze
{
"field":"title",
"text":"Love Live! The School Idol Movie"
}
得到结果:
{
"tokens" : [
{
"token" : "love",
"start_offset" : 0,
"end_offset" : 4,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "live",
"start_offset" : 5,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "the",
"start_offset" : 11,
"end_offset" : 14,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "school",
"start_offset" : 15,
"end_offset" : 21,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "idol",
"start_offset" : 22,
"end_offset" : 26,
"type" : "<ALPHANUM>",
"position" : 4
},
{
"token" : "movie",
"start_offset" : 27,
"end_offset" : 32,
"type" : "<ALPHANUM>",
"position" : 5
}
]
}
- 自定义分词器进行测试
POST /_analyze
{
"tokenizer":"standard",
"filter":["lowercase"],
"text":"Matering Elasticsearch"
}
得到结果:
{
"tokens" : [
{
"token" : "matering",
"start_offset" : 0,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "elasticsearch",
"start_offset" : 9,
"end_offset" : 22,
"type" : "<ALPHANUM>",
"position" : 1
}
]
}
Standard Analyzer
- 默认分词器
- 按词切分
- 小写处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9OBHOjTv-1612083615162)(/Users/felix/Library/Application Support/typora-user-images/image-20210131162243567.png)]
中文分词器
ICU Analyzer
- 提供了 Unicode 的支持,更好的支持了亚洲语言
sudo bin/elasticsearch-plugin install analysis-icu
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u6SPpGIj-1612083615163)(/Users/felix/Library/Application Support/typora-user-images/image-20210131163416151.png)]
IK
- 支持自定义词库,支持热更新分词字典
THULAC
- 清华大学实验室开发