单词词典(Term Dictionary)是倒排索引的重要组成记录所有文档的单词,一般都比较大
记录单词到倒排排列表的关联信息
倒排列表(Posting List)记录了单词对应的文档集合,由倒排索项( Posting )组成倒排索项( Posting)主要包含如下信息:
文档Id,用于获取原始信息
单词频率(TF Term Frequency),记录该单词在该文档中的出现次数,用于后续相关性算分
位置(Position),记录单词在文档中的分词位置(多个),用于做词语搜索( Phrase Query )
偏移(Offset),记录单词在文档的开始和结束位置,用于做高亮显示
分词器是es中专门处理分词的组件,英文为Analyzer,它的组成如下
Character Filters
针对原始文本进行处理,比如去除 html特殊标记符
Tokenizer
将原始文本按照一定规则切分为单词
Token Filters
针对 tokenizer 处理的单词就行再加工,比如转小写、删除或新增等处理
es 自带如下的分词器Standard、Simple、Whitespace、Stop、Keyword、Pattern、Language
Tokenizer
将原始文本按照一定规则切分为单词( term or token )
自带的如下
standard 按照单词进行分割
?letter 按照非字符类进行分割
whitespace 按照空格进行分割
UAX URL Email 按照 standard 分割,但不会分割邮箱和 url-
NGram 和 Edge NGram 连词分割
Path Hierarchy按照文件路径进行切割
Token Filters
对于 tokenizer 输出的单词( term )进行增加删除、修改等操作
自带的如下
- lowercase 将所有 term 转换为小写
- stop 删除 stop words
- NGram 和Edge NGram 连词分割
- Synonym添加近义词的term
分词会在如下两个时机使用
创建或更新文档时(Index Time),会对相应的文档进行分词处理查询时(Search Time),会对查询语句进行分词