索引可以分为正排索引和倒排索引,生活和的例子有:
正排索引:书的目录
倒排索引:技术书籍最后的关键字指向页
elasticsearch 倒排索引的构成
单词词典(Term DIctonary)记录所有文档的单词,记录单词到倒排列表的关联关系
- 单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入与查询
倒排列表(Posting List)记录了单词对应的文档结合,由倒排索引项组成
- 倒排索引项(Posting)
- 文档ID
- 词频TF 该单词在文档中出现的次数,用于相关性评分
- 位置(Posting) 单词在文档中分词的位置,用于语句搜索(phrase query)
- 偏移(Offset) 记录单词开始结束位置,实现高亮显示
Elasticsearch 是以JSON格式存储文档中的每个字段,每个字段都有自己的倒排索引
可以指定对某些字段不做索引
- 优点:节约存储空间
- 缺点:字段无法被搜索
- 结论:只针对必要字段做索引