一、概述
可用于将字符串字段转换为单独的术语:
- 添加到倒排索引中,以便文档可搜索。
- 级查询(如 生成搜索词的 match查询)使用。
分析器分为内置分析器和自定义的分析器,它们都是由若干个字符过滤器(character filter)+ 一个分词器(tokenizers)+ 若干个词项过滤器(token filter)组成:
二、内置分析器和自定义分析器
三、字符过滤器(character filter)
官网:https://www.elastic.co/guide/en/elasticsearch/reference/8.6/analysis-charfilters.html
字符过滤器将原始文本作为字符流接收,并可以通过添加、删除或更改字符来转换该流。例如,字符过滤器可用于将印度-阿拉伯数字 (٠١٢٣٤٥٦٧٨٩) 转换为阿拉伯-拉丁数字 (0123456789),或从流中剥离 HTML 元素。
Elasticsearch 有许多内置的字符过滤器,可用于构建自定义分析器。
1、HTML Strip Character Filter
html_strip会删除像这样的 HTML 元素,并解码像这样的 HTML 实体&。
2、Mapping Character Filter
mapping用指定的替换项替换任何出现的指定字符串。
3、Pattern Replace Character Filter
pattern_replace用指定的替换字符替换任何与正则表达式匹配的字符。
四、分词器(tokenizers)
分词器接收字符流,将其分解为单个标记,然后输出。例如whitespace分词器看到任何空格时都会将文本进行分解,它会将文本由“Quick brown fox!”转换为[Quick, brown, fox!]。
Elasticsearch 有许多内置的标记器,可用于构建 自定义分析器:
-
面向词的分词器:
- Standard Tokenizer
分词器standard根据 Unicode 文本分割算法的定义,按照单词边界将文本划分为术语。它会删除大多数标点符号。它是大多数语言的最佳选择。 - Letter Tokenizer
当分词器letter遇到非字母的字符时,它就会将文本分成多个术语。 - Lowercase Tokenizer
lowercase类似letter,当遇到非字母的字符时,它会将文本分成多个术语,但它也会将所有术语转换为小写。 - Whitespace Tokenizer
whitespace遇到任何空格字符时,它就会将文本分成多个术语。 - UAX URL Email Tokenizer
uax_url_email类似于standard,只是它将 URL 和电子邮件地址识别为单个标记。 - Classic Tokenizer
classic是一个基于语法的英语标记器。 - Thai Tokenizer
thai将泰语文本分割成单词。
- Standard Tokenizer
-
部分单词分词器
- N-Gram Tokenizer
它首先将文本分解为单词,然后在单词上移动的滑动窗口 - 指定长度的连续字符序列。 - Edge N-Gram Tokenizer
- N-Gram Tokenizer
-
结构化文本分词器
- Keyword Tokenizer
接受给定的任何文本,并输出与单个术语完全相同的文本。它可以与标记过滤器结合使用,例如lowercase规范化分析的术语。 - Pattern Tokenizer
pattern使用正则表达式,在文本与单词分隔符匹配时将其拆分为术语,或者将匹配的文本捕获为术语。 - Simple Pattern Tokenizer
simple_pattern使用正则表达式捕获匹配的文本作为术语。它使用正则表达式功能的受限子集,并且通常比pattern标记器更快。 - Char Group Tokenizer
char_group可通过要拆分的字符集进行配置。 - Simple Pattern Split Tokenizer
simple_pattern_split使用与标记器相同的受限正则表达式子集simple_pattern,但在匹配处拆分输入,而不是将匹配项作为术语返回。 - Path Tokenizer
path_hierarchy采用类似文件系统路径的分层值,在路径分隔符上进行拆分,并为树中的每个组件发出一个术语,例如/foo/bar/baz→ [/foo, /foo/bar, /foo/bar/baz ]。
- Keyword Tokenizer
五、词项过滤器(token filter)
官网:https://www.elastic.co/guide/en/elasticsearch/reference/8.6/analysis-tokenfilters.html
词项过滤器从分词器接收分词流,并且可以修改词项(例如小写)、删除词项(例如删除停用词)或添加词项(例如同义词)。Elasticsearch有许多内置的词项过滤器,可以使用它来构建自定义分词器: