Anatomy of an analyzer(分析器解析)
无论是内置的还是自建的分析器,都是由三个构造块的组合:character filters, tokenizers, and token filters.
内置的分析器将这些构建块预先打包到适合不同语言和文本类型的分析器中。Elasticsearch还公开了各个构建块,以便将它们组合起来定义新的自定义分析器。
Character filters
character filter 以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换流。例如,把 (٠١٢٣٤٥٦٧٨٩)转换成(0123456789)、去除HTML标签。
An analyzer may have zero or more character filters, which are applied in order.
Tokenizer
Tokenizer接收到字符流,把它切分成单独的tokens(通常是单独的单词),并且输出这些tokens。例如:whitespace tokenizer 以空白符切分单词,"Quick brown fox!" 变成 [Quick, brown, fox!]
Tokenizer还负责记录每个词的顺序或位置,以及该词所表示的原始词的起始和结束字符偏移量
An analyzer must have exactly one tokenizer.
Token filters
token filter接收token流,并且可以添加、移除、改变这些tokens。例如:lowercase token filter会把所有的token转成小写,stop token filter会移除stop words,synonym token filter会添加同义词要token流。
token filter 不允许改变每个token的位置和偏移量。
An analyzer may have zero or more token filters, which are applied in order.