analyzer
对于text类型的字段,在执行插入或查询时es会使用analyzer对给定内容进行解析后在建立倒排索引或者执行查询
tokenization
分词器:将给定内容分割为独立的单词
normalization
但是仅仅使用分词器不能满足以下需求:
- 比如你希望fax匹配Fax(忽略大小写)
- say匹配said(时态)
- jump匹配leaf(同义词)
组成
在es中无论是给定的默认分析器还是用户自定义的分析器全都由以下三部分组成
character filters
一个analyzer可以有0个或任意个
字符过滤器接收原始文本流。可以对原始流进行操作(转换、新增、移除、修改)产生新的文本流传递给后续使用
tokenizers
一个analyzer只能包含一个
分词器对接收到的文本流按照一定规则(默认空格、可以配置)将文本切割为多个对立的单词
同时记录每个单词的起始偏移量与词项在分词结果中的下标
token filters
一个analyzer可以有0个或任意个
接收分词器分割后的词项集合,可以转换、移除某些词项。比如:
- 将词项转换为小写
- 将词项转换为同义词
- 将此项去除(给定的stop word)
转换为词项列表后es会建立一个词图
domain name system is fragile 文本转换为如下

由于 domain name system转换为dns
stemmer
词干转换,对于某些单词
- 算法类型
移除特定的词尾(比如s、es),但是无法对某些特殊时态处理(如say与said)
优点:
- 使用更少内存
- 速度快
- 词典类型
使用词典建立对应关系,直接转换
自定义ananlyzer
tokenizer 分词器
char_filter 字符过滤器
filter 词项过滤器
position_increment_gap 对象为数组时 两个item之间的间距默认100
stem_exclusion 给定单词不用进行词干转换即不会被stemmer token filter 转换
type custom 或者已有的analyzer名称
stopwords 需要排除的词语
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/analysis-custom-analyzer.html

浙公网安备 33010602011771号