分析器的组成

编辑

一个分析器(无论是内置的还是自定义的)只是一个包含三个较低级别构建块的包:字符过滤器分词器词元过滤器

内置的 分析器 将这些构建块预先打包成适合不同语言和文本类型的分析器。 Elasticsearch 还公开了各个构建块,以便可以将它们组合起来定义新的 custom 分析器。

字符过滤器

编辑

字符过滤器接收原始文本作为字符流,并且可以通过添加、删除或更改字符来转换流。例如,可以使用字符过滤器将印度-阿拉伯数字 (٠‎١٢٣٤٥٦٧٨‎٩‎) 转换为其阿拉伯-拉丁等效形式 (0123456789),或者从流中删除像 <b> 这样的 HTML 元素。

一个分析器可以有 零个或多个 字符过滤器,这些过滤器按顺序应用。

分词器

编辑

分词器接收字符流,将其分解为单独的词元(通常是单个单词),并输出词元流。例如,whitespace 分词器会在遇到任何空格时将文本分解为词元。它会将文本 "Quick brown fox!" 转换为词元 [Quick, brown, fox!]

分词器还负责记录每个词元的顺序或位置以及词元所表示的原始单词的起始和结束字符偏移量

一个分析器必须有 恰好一个 分词器

词元过滤器

编辑

词元过滤器接收词元流,并且可以添加、删除或更改词元。例如,lowercase 词元过滤器将所有词元转换为小写,stop 词元过滤器从词元流中删除像 the 这样的常用词(停用词),并且 synonym 词元过滤器将同义词引入词元流。

不允许词元过滤器更改每个词元的位置或字符偏移量。

一个分析器可以有 零个或多个 词元过滤器,这些过滤器按顺序应用。