面试题答案
一键面试倒排索引基本原理
- 正向索引:传统的正向索引是从文档到词的映射。即给定一个文档,能够从中获取到该文档包含的所有词项。例如文档
D1
内容为“苹果好吃”,正向索引会记录D1
中有“苹果”和“好吃”这两个词。 - 倒排索引:与之相反,倒排索引是从词到文档的映射。它记录每个词项在哪些文档中出现,以及在该文档中的位置等信息。以文档集合
{D1: "苹果好吃", D2: "我喜欢苹果"}
为例,倒排索引结构如下:- “苹果”:[D1, D2]
- “好吃”:[D1]
- “我”:[D2]
- “喜欢”:[D2] 在Elasticsearch中,倒排索引由一个个的段(Segment)组成,每个段是一个自包含的倒排索引结构,在查询时这些段会被合并处理。
实际应用场景
- 全文搜索:如电商网站搜索商品描述,新闻网站搜索文章内容等。用户输入关键词,通过倒排索引能快速定位到包含该关键词的文档。例如在淘宝搜索“运动鞋”,倒排索引可以迅速找到所有商品描述中包含“运动鞋”的商品记录。
- 日志分析:在海量日志数据中,根据特定的关键词(如错误信息、特定操作记录等)查找相关日志条目。比如查找所有记录“系统内存不足”错误的日志,倒排索引可以高效定位到这些日志。
- 站内搜索:各类网站的站内搜索功能,用户搜索特定的内容,通过倒排索引快速找到相关网页。例如在技术博客站内搜索关于“Python编程”的文章。
倒排索引支持这些场景的原因
- 高效查找:倒排索引将词与文档关联,当查询词项时,直接从倒排索引中获取包含该词的文档列表,无需遍历所有文档,大大提高了查询效率。在大规模数据下,这种效率提升尤为显著。
- 灵活性:支持多词查询。通过对多个词项在倒排索引中的结果进行合并(如交集、并集等操作),可以实现复杂的查询逻辑,满足不同用户的多样化查询需求。例如在电商搜索中同时搜索“运动鞋 白色”,可通过倒排索引分别获取“运动鞋”和“白色”对应的文档集,然后取交集得到符合条件的商品。