在Elasticsearch中,倒排索引是一种用于高效查询文档的技术。传统索引是从文档到词的映射,而倒排索引则是从词到文档的映射。以下是倒排索引的关键特点和工作原理
1.索引结构
词汇表(Term Dictionary)
- 定义:词汇表是一系列唯一关键词的集合,每个关键词都是经过分析器处理后的结果。
- 存储:词汇表通常按照字典顺序排序,以便快速定位和访问。
- 内容:每个词条(term)都有以下信息:
词条本身
词条的频率统计(例如TF-IDF)
词条的偏移量(offset)
倒排列表(Posting List)
- 定义:每个词条对应一个倒排列表,记录了包含该词条的所有文档ID。
- 存储:倒排列表通常按文档ID排序,并且可以进行压缩存储。
内容:
文档ID
词条在文档中的位置信息
词条在文档中的频率2.建立过程
分析文档
1.分析器:Elasticsearch使用分析器(Analyzer)对文档内容进行处理,将文本拆分成一个个词条。
2.示例:假设文档内容为“阿里巴巴是一家中国公司”,分析器可能会将其拆分为“阿里巴巴”、“是”、“一家”、“中国”、“公司”。构建索引
1.新词条:如果某个词条首次出现,则将其添加到词汇表中,并创建一个新的倒排列表。
2.已有词条:如果某个词条已经存在,则在对应的倒排列表中添加当前文档的ID。
3.示例:
“手机”首次出现时,词汇表中添加“手机”,并创建一个空的倒排列表。
第二个文档包含“手机”,则在“手机”的倒排列表中添加该文档ID。3. 查询优化
查询处理
1.解析查询:用户输入查询词后,Elasticsearch同样使用分析器将其拆分成词条。
2.查找倒排列表:对于每个查询词条,查找其对应的倒排列表。
3.合并结果:计算所有查询词条倒排列表的交集,得到最终的匹配文档集合。
4.示例
假设查询词为“华为手机”:
查找“华为”的倒排列表文档id:[2,3]
查找“手机”的倒排列表id:[1, 2]
合并交集:[2]4. 存储与检索
存储
压缩:倒排列表通常采用压缩算法存储,以减少磁盘占用。
块存储:Elasticsearch使用块存储(Block-based format)来加速读取速度。检索
快速定位:通过词汇表快速定位到词条的倒排列表。
并发读取:多个查询可以并发读取不同的倒排列表,提高查询效率。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。