做全文搜索就需要对文档分析、建索引。从文档中提取词元(Token)的算法称为分词器(Tokenizer),在分词前预处理的算法称为字符过滤器(Character Filter),进一步处理词元的算法称为词元过滤器(Token Filter),最后得到词(Term)。这整个分析算法称为分析器(Analyzer)。
文档包含词的数量称为词频(Frequency)。
搜索引擎会建立词与文档的索引,称为倒排索引(Inverted Index)。
Analyzer 按顺序做三件事:
- 使用
CharacterFilter
过滤字符 - 使用
Tokenizer
分词 - 使用
TokenFilter
过滤词
比如一段文字<p>Hello a WORLD</p>
- 字符过滤器
character filters
首先,字符串按顺序通过每个 字符过滤器 。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将 & 转化成 and。
此时变成Hello a WORLD
- 分词器
tokenizers
其次,字符串被 分词器 分为单个的词条。一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条。
变成Hello
,a
,WORLD
- Token 过滤器
token filters
最后,词条按顺序通过每个 token 过滤器 。这个过程可能会改变词条(例如,小写化 Quick ),删除词条(例如, 像 a, and, the 等无用词),或者增加词条(例如,像 jump 和 leap 这种同义词)。
hello
,world