【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。如果文章有不足之處,歡迎關注微信公衆號私信與我進行交流!】java
倒排索引是目前搜索引擎公司對搜索引擎最經常使用的存儲方式,也是搜索引擎的核心內容,在搜索引擎的實際應用中,有時須要按照關鍵字的某些值查找記錄,因此是按照關鍵字創建索引,這個索引就被稱爲倒排索引。數組
首先你要明確,索引這東西,通常是用於提升查詢效率的。舉個最簡單的例子,已知有5個文本文件,須要咱們去查某個單詞位於哪一個文本文件中,最直觀的作法就是挨個加載每一個文本文件中的單詞到內存中,而後用for循環遍歷一遍數組,直到找到這個單詞。這種作法就是正向索引的思路。微信
正向索引的這種查詢效率也不須要我多吐槽了。倒排索引的思路其實也並不難。再舉一個例子,有兩段文本搜索引擎
D1:Hello, conan! D2:Hello, hattori!
第一步,找到全部的單詞code
Hello、conan、hattori
第二步,找到包含這些單詞的文本位置blog
Hello(D1,D2) conan(D1) hattori(D2)
咱們將單詞做爲Hash表的Key,將所在的文本位置做爲Hash表的Value保存起來。索引
當咱們要查詢某個單詞的所在位置時,只須要根據這張Hash表就能夠迅速的找到目標文檔。內存
結合以前的說的正向索引,不難發現。正向索引是經過文檔去查找單詞,反向索引則是經過單詞去查找文檔。文檔
倒排索引的優勢還包括在處理複雜的多關鍵字查詢時,可在倒排表中先完成查詢的並、交等邏輯運算,獲得結果後再對記錄進行存取,這樣把對文檔的查詢轉換爲地址集合的運算,從而提升查找速度。for循環
版權聲明
【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。如果文章有不足之處,歡迎關注微信公衆號私信與我進行交流!】