1. ES分词器
分词器是专门处理分词的组件,Analyzer由三部分组成:Character Filters、Tokenizer、Token Filters。
- Character Filters:对文本原始处理,如去除html,
- Tokenizer:按照分词器规则进行切分单词,
- Token Filters:将切分后的单词进行加工,小写,删除空格,增加同义词等。
2. ES内置的分词器
2.1 Standard Analyzer默认分词器
按词进行切分,小写处理,停用词不做处理(the、a、is)
2.2 Simple Analyzer
简单分词器,按照非字母切分,不是字母将被过滤,符号被过滤,小写处理。
2.3 Stop Analyzer
小写处理,停用词过滤(the、a、is)
2.4 Whitespace Analyzer
按照空格切分,不做大小写处理
2.5 Keyword Analyzer
不分词,直接将输入当作输出
2.6 Patter Analyzer
正则表达式,默认\W+ (非字符分割)
2.7 其他分词器
当ElasticSearch自带的分词器无法满足时,还可以自定义分词器,可以自定义分词器,通过自组合不同的组件实现
- Character Filter
- Tokenizer
- Token Filter
在Tokenizer之前对文本进行处理,例如增加删除及替换字符。可以配置多个Character Filters。会影响Tokenizer的position和offset信息。
一些自带的Character Filters - html strip 去除html标签
- mapping 字符串替换
- pattern replace 正则匹配替换
# 使用char filter 将-替换为_
PUT _analyze
{
"tokenizer":"standard",
"char_filter":[
{
"type": "mapping",
"mappings": ["- => _"]
}
]
}
3. 使用analyzer api
GET /_analyze
{
"analyzer": "standard",
"text":"ElasticSearch learning"
}
POST books/_analyzer
{
"field":"title",
"text":"ElasticSearch in action"
}