版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
分析器
ps: Analysis 是将文本转化为tokens(标记)或terms(术语)的过程。tokens和terms被添加到倒排索引中,用于搜索。
ps:分析由分析器执行,分析器可以是内部分析器,也可按索引定义的自定义分析器。
- 索引时分析
- 指定索引的analyzer
- 搜索时分析器
- 在类似match query 的全文搜索时,该类分析器将查询字符串的文本转为term,会将同一分析器应用于查询字符串、文本
- 指定查询时分析器
-
- 通常在索引和搜索时,应使用相同的分析器
分析器架构
- 一个分析器包含三个较底层构建块的包:character filters(字符过滤器)、tokenizers(分词器)、token filters(标记过滤器)
- 内置分析器将这些构建块先打包成适合不同语言、文本类型的分析器
- character filter: 将原始文本作为字符流接受,可通过增删改字符来转换流【character filter可有0到多个,按顺序应用】
- Tokenizer: 接收字符流,将其分解为单个token,并输出token流【tokenizer还负责记录每个term的顺序和位置以及该term所代表的原始单词的开始和结束的字符偏移量,Tokenizer有且只能有一个】
- Token filter:token filter 接收token流,可增删改token【token filter 不允许更改每个token的位置和字符偏移量,可有0个或多个token filer,按顺序应用】
测试分析器
POST _analyze
- Positions and ccharacter offsets
分析器将单词转为term,记录term的顺序或相对位置,原始文本中每个term的开始结束字符偏移量(用作高亮显示搜索片段)
在指定索引上 可以引用自定义分析器
内置分析器
- 内置分析其不需配置即可使用,一些分析器支持配置选项以改变其行为,ex:standard 分析器可配置停用词
- standard 分析器
- 构成:
-
- tokenizer:Standard Tokenizer
-
- token filters: Standard Token Filter、Lower Case Token Filter、Stop Token Filter(默认禁用)
- 通常添加token filters 进行修改
- Simple Analyzer
- simple analyzer 将文本分割为terms,所有的term都是小写
- 该分析器不可配置
- 构成:
-
- Tokenizer: Lower Case Tokenizer
- Whitespace 分析器
- whitespace分析器在遇到空格字符时将文本转换为terms
- 不可配置
- 构成:
-
- Whitespace Tokenizer
- Stop Analyzer
- 与simple分析器相同,但增加了删除停用词,默认使用_english_停用词
- 配置参数:
-
- stopwords: 预定义的停用词列表
-
- stopwords_path:停用词文件的路径,是elasticsearch 的config目录的相对路径
- 构成:
-
- Tokenizer: Lower Case Tokenizer
-
- Token filters: Stop Token Filter
- keyword Analyzer
- keyword分析器是一个noop分析器,将整个输入字符作为单个token返回
- 无配置参数
- 构成:
-
- Tokenizer: Keyword Tokenizer
- Pattern Analyzer
- pattern分析器使用正则表达式将文本分隔为terms,正则表达式匹配token separators ,不是token本身,正则默认为\W+
- 配置参数
-
- pattern: java正则表达式,默认为\W+
-
- flags: java正则表达式flags,flags 用管道符分割
-
- lowercase:terms是否小写,默认为true
-
- stopwords: 预定义的停用词列表
-
- stopwords_path
- 构成:
-
- Tokenizer : Pattern Tokenizer
-
- Tokenizer Filters: Lower Case Token Filter 、Stop Token Filter(默认禁用)
自定义分析器
- 可创建的自定义分析器构成:
- 0或多个character filters
- 1个tokenizer
- 0或多个token filters
- 配置:
- tokenizer: 必选,内置的或自定义的tokenizer
- char_filter: 可选,内置或自定义的character filters数组
- filter : 可选参数,内置或自定义的token filters
- position_increment_gap: 当索引文本数组的值时,es会在一个值的最后一个term和下一个值的第一个term中插入一个虚假间隙,确保短语查询不会匹配两个不同元素的term