1 倒排索引
正排索引:文档id到单词的关联关系。
倒排索引:单词到文档id的关联关系。
2 倒排索引组成
单词词典(Term Dictionary)
倒排列表(Posting List)
3 单词词典(Term Dictionary)
单词词典的实现一般用B+树。
4 倒排列表(Posting List)
倒排列表记录了单词对应的文档集合,有倒排索引项(Posting)组成。
倒排索引项主要包含如下信息:
1.文档id用于获取原始信息
2.单词频率(TF,Term Frequency),记录该单词在该文档中出现的次数,用于后续相关性算分。
3.位置(posting),记录单词在文档中的分词位置(多个),用于作词语搜索(Phrase Query)
4.偏移(Offset),记录单词在文档的开始和结束为止,用于高亮显示。?
5 es存储的是一个json格式的文档,其中包含多个字段,每个字段会有自己的倒排索引。
6 分词
分词是将文本转换成一系列单词,(Term or Token)的过程,也可以叫文本分析,在ES里面称为Analysis。
7 分词器是ES中专门处理分词的组件,英文为Analyzer,它的组成如下:
Character Filters :针对原始文本进行处理,比如去除html标签。
Tokenizer:将原始文本进行处理,比如去除html标签。
Token Filters:针对Tokenizer处理的单词进行再加工,比如转小写/删除或增新等处理
8 分词调用顺序
Analyze API
Es提供了一个可以测试分词的api接口,方便测试分词效果,endpoint是_analyze
可以直接指定analyzer进行测试。
1.可以直接指定索引中的字段进行测试。
2.可以自定义分词器进行测试。
预定义的分词器。
es自带的分词器有如下:
Standard Analyzer
·默认分词器
·按词切分,支持多语言
·小写处理
Simple Analyzer
·按照非字母切分。
·小写处理。