在Elasticsearch中,分析器(Analyzer)是一个处理文本数据的管道,它将输入的文本转换为一系列词元(tokens),并可以对这些词元进行进一步的处理和规范化。分析器由以下三个主要组件构成:
1.字符过滤器(Character Filters)
字符过滤器是分析器管道中的第一步,用于对输入文本进行预处理。它们可以添加、删除或修改文本中的字符。字符过滤器是可选的,一个分析器可以有零个或多个字符过滤器。
• 常见用途:例如,可以使用字符过滤器去除HTML标签(如`<b>`、`<h1>`等),或者将某些特定字符替换为其他字符。
• 示例:如果输入文本是`<p>Ironman is flying</p>`,通过`html_strip`字符过滤器后,文本会被转换为`Ironman is flying`。
2.分词器(Tokenizer)
分词器是分析器的核心组件,负责将文本分割成单独的词元(tokens)。分词器根据特定的规则(如空白字符、标点符号或语言规则)将文本拆分为多个词元。一个分析器必须且只能有一个分词器。
• 常见分词器:
• 标准分词器(Standard Tokenizer):根据语法和标点符号将文本分割成词元。
• 空白分词器(Whitespace Tokenizer):在遇到空白字符时将文本分割成词元。
• N-gram分词器:生成文本的N-gram片段,常用于自动补全。
• 示例:对于文本`Ironman is flying`,使用空白分词器会生成词元`[Ironman, is, flying]`。
3.词元过滤器(Token Filters)
词元过滤器是分析器管道中的最后一步,用于对分词器生成的词元进行进一步处理。它们可以添加、修改或删除词元,但不能改变词元的位置或字符偏移量。
• 常见用途:
• 小写过滤器(Lowercase Token Filter):将所有词元转换为小写。
• 停用词过滤器(Stop Token Filter):移除常见的停用词(如`the`、`is`等)。
• 同义词过滤器(Synonym Token Filter):引入同义词。
• 词干提取(Stemming):将词元还原为词根形式(如将`went`还原为`go`)。
• 示例:对于词元`[Ironman, is, flying]`,使用小写过滤器后会生成`[ironman, is, flying]`。
总结
分析器通过这三个组件的协同工作,将输入的文本转换为适合索引和搜索的词元流。通过合理配置字符过滤器、分词器和词元过滤器,可以实现对文本的灵活处理,从而提高搜索结果的相关性和准确性。
分析器的构成
分析器------无论是内置的还是自定义的------只是一个包含三个低级构建块的包:字符过滤器、分词器和词元过滤器-character filters, tokenizers, and token filters.。
内置分析器将这些构建块预先打包成适合不同语言和文本类型的分析器。Elasticsearch还暴露了这些单独的构建块,以便它们可以组合起来定义新的`自定义`分析器。
字符过滤器接收原始文本作为字符流,并可以通过添加、删除或更改字符来转换该流。例如,字符过滤器可以用于将印度-阿拉伯数字(٠١٢٣٤٥٦٧٨٩)转换为其阿拉伯-拉丁数字等价物(0123456789),或者从流中删除HTML元素,如`<b>`。
分析器可以有零个或多个字符过滤器,这些过滤器按顺序应用。
分词器接收字符流,将其分解为单独的词元(通常是单个单词),并输出一个词元流。例如,`whitespace`分词器会在看到任何空白字符时将文本分解为词元。它会将文本`"Quick brown fox!"`转换为词元`[Quick, brown, fox!]`。
分词器还负责记录每个词元的顺序或位置以及原始单词的起始和结束字符偏移量。
分析器必须有恰好一个分词器。
词元过滤器接收词元流,并可以添加、删除或更改词元。例如,`lowercase`词元过滤器将所有词元转换为小写,`stop`词元过滤器从词元流中移除常见词汇(停用词)如`the`,而`synonym`词元过滤器会向词元流中引入同义词。
词元过滤器不允许更改每个词元的位置或字符偏移量。
分析器可以有零个或多个词元过滤器,这些过滤器按顺序应用。