核心數據結構:倒排索引
正向索引:文檔 → 詞列表。
倒排索引:詞 → 文檔 ID 列表 (Posting List)。
查詢流程簡化
- 分詞:
"北京 天氣 預報" → [北京, 天氣, 預報]。
- 查詞典:獲取各詞的 Posting List (已按文檔權重排序)。
- 合併:多詞求交集 (AND) 或聯集 (OR),利用跳表/跳躍指針加速。
- 排序:結合 BM25/PageRank/點擊率等特徵重排 Top-K。
- 摘要:高亮關鍵詞,生成展示片段。
工程關鍵點
- 分布式存儲:索引分片 (Shard) 橫向擴展,單分片數億文檔。
- 內存常駐:熱門詞 Posting List 全量載入內存,毫秒級響應。
- 增量更新:實時索引 (Real-time Index) + 定期合併 (Segment Merge)。
- 壓縮編碼:Varint、Delta、PForDelta 壓縮 DocID,節省 50%+ 空間。
開源替代
- Elasticsearch:基於 Lucene,RESTful,開箱即用。
- Meilisearch:Rust 寫作,極速、容錯、適合中小站點。
- Typesense:C++ 實現,強類型 Schema、即時搜索。