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 文本转换为如下
image
由于 domain name system转换为dns

stemmer

词干转换,对于某些单词

  • 算法类型
    移除特定的词尾(比如s、es),但是无法对某些特殊时态处理(如say与said)
    优点:
  1. 使用更少内存
  2. 速度快
  • 词典类型
    使用词典建立对应关系,直接转换

自定义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

posted @ 2021-05-14 10:07  犬犬呀  阅读(409)  评论(0)    收藏  举报