這裡介紹的是一種高效能檢索系統內部核心的索引實現原理,該檢索系統承載我們業務場景中非常核心的商品檢索功能,在少於100檢索條件下可以做到30ms以內的實時響應,這裡,我們主要詳解介紹其中的內部技術實現,這些技術實現在一些其他場景下也具備一定的通用性,這篇文章會僅僅從技術的角度出發分析問題的背景和解決方案,希望為大家在後續的工作中為解決類似的問題提供一種成熟穩定的解決方案的參考。
我們面對的問題場景是有數千萬的商品id,有數十萬種檢索條件,滿足不同檢索條件有不同的一批商品id,各種檢索條件可以混合檢索,線上業務通常條件下會有數十種檢索條件,要求在30ms以內獲得檢索結果。
針對上述的問題場景,不考慮業務邏輯,單從技術層面分析,我們的解決方案是對所有商品id構建乙個全量的vector列表,然後對每種檢索條件構建乙個位圖索引bitmap,bitmap的每乙個bit與商品全量vector的下標進行對映。每種檢索條件的檢索結果都是預先構建好的,對不同的檢索條件進行運算後得到乙個對應最終檢索結果的bitmap,從該bitmap可以對映得到對應實際檢索結果的商品id列表。
如下圖所示:
上面的方案還存在乙個比較嚴重的問題,由於bitmap構建時的base vector是全量商品id列表,這個列表元素個數是數千萬級別,而bitmap有數十萬根,每一根bitmap如果按原樣儲存,則僅bitmap的記憶體占用就至少需要100g+,對記憶體的需求太大,這裡的bitmap是非常稀疏的,我們完全可以對bitmap進行壓縮儲存。
bitmap壓縮的設計實現如下:
基於全文檢索系統實現文件系統相關推薦功能
3 基於全文檢索系統實現文件系統推薦 1.1 編輯距離 編輯距離 levenshtein distance 是針對二個字串 例如英文本 的差異程度的量化量測,是 用來度量兩個序列相似程度的指標。編輯距離指的是在兩個字串之間,由乙個字串轉換為另乙個字串所需要的最少單字元編輯操作。單字元編輯操作定義為 ...
航班資訊查詢和檢索系統 資料結構課程設計
問題及 設計並實現乙個航班資訊查詢和檢索系統。要求 對飛機航班資訊進行排序和查詢,可按照航班號 起點站 到達站 起飛時間和到達時間等資訊進行查詢。航班資訊表的樣式如下 航班號起點站 終點站 班期 起飛時間 到達時間 機型 票價ca1544 合肥 北京1.2.4.5 10 55 12 40 73396...
設計高效能大併發WEB系統架構注意點
設計高效能大併發web系統架構注意點 第01 大型架構的演進之路 第02 上 分布式快取 第02 下 分布式快取 第03 分布式訊息佇列 第04 分布式資料儲存 第05 分布式服務框架 第06 高效能系統架構 第07 高可用系統架構 第08 系統的安全架構 第09 架構實戰案例分析 系統的垂直伸縮,...