作为一个初学者,对于es的analyzer的使用,做一个简单的记录笔记,有大神看到可以留言给予更好的学习方向
standard:根据词切分,将大写字母转成小写字母,in不过滤
GET /_analyze
{
"analyzer":"standard",
"text":"Mastering Elasticsearch, elasticsearch in Action"
}
simple:按照非字母切分,非字母的都被去除,将大写字母转成小写字母
GET /_analyze
{
"analyzer":"simple",
"text":"2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
whitespace:按照空格切分
GET /_analyze
{
"analyzer":"whitespace",
"text":"Mastering Elasticsearch, elasticsearch in Action"
}
stop:相比Simple Analyzer,多了stop filter,会把the,a,is等修饰性词语去除
GET /_analyze
{
"analyzer":"stop",
"text":"2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
keyword:不分词,直接将输入当一个term输出
GET /_analyze
{
"analyzer":"keyword",
"text":"2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
pattern: 通过正则表达式进行分词,默认是\W+,非字符的符号进行分隔
{
"analyzer":"pattern",
"text":"2 running Quick brown-foxes leap over lazy dogs in the summer evening."
}
Elasticsearch还提供了不同国家语言的分词:Language Analyzer
中文分词的难点
- 中文句子,切分成一个一个词(不是一个个字)
- 英文中,单词有自然的空格作为分隔
- 一句中文,在不同的上下文,有不同的解释
一些例子:
- 这个苹果,不大好吃/这个苹果,不大,好吃!
- 他说的确实在理/这事的确定不下来
ICU Analyzer
- 需要安装plugin Elasticsearch-plugin install analysis-icu
- 提供了Unicode的支持,更好的支持亚洲语言
{
"analyzer":"icu_analyzer",
"text":"他说的确实在理"
}
IK Analyzer
- 支持自定义词库,支持热更新分词字典
- https://github.com/medcl/elasticsearch-analysis-ik
THULAC Analyzer
- THU Lexucal Analyzer for Chinese,清华大学自然语言处理和社会人文计算实验室的一套中文分词器
- https://github.com/microbun/elasticsearch-thulac-plugin