當前位置:成語大全網 - 新華字典 - 為什麽解密sphinx index的速度是lucene index的10倍?

為什麽解密sphinx index的速度是lucene index的10倍?

LUCENE索引結構是壹種基於二叉樹的倒B樹結構,這就決定了在索引數據時,需要花費壹定的時間來維護基於二叉樹的倒B樹結構,比如搜索和遞增,其時間復雜度為O(LOGN),而sphinx是壹種基於HASH hash樹的倒B樹結構,其時間復雜度為O(1),所以隨著數據的增加,LUCENE索引樹。結果sphinx的索引速度是LUCENE的10倍。

附:Lucene反向排序索引原理

Lucene反向排序索引原則

Lucene是apache軟件基金會Jakarta項目組的子項目[4],是壹個高性能的java全文檢索框架。lucene索引結構的核心部分是反向排序索引。

用壹個例子來描述反向排序。

假設有兩篇文章:

第1條的內容是:* *和中國。

第二條的內容是:中國。

1,Lucene在建立索引之前通過分詞器找出文章中的關鍵詞。我們用壹元分詞作為例子。那麽第1條的關鍵詞是[* *][和][國],第二條的關鍵詞是[中國][國]。

2、反向排序索引

分詞找到的對應關系是文章到關鍵詞的映射,所以處理後的結果不利於檢索,幾乎是全掃描。然後Lucene使用逆向排序建立索引,將這種關系轉化為關鍵詞到文章的映射,將關鍵詞排序為字符串。當然,lucene也在文章中加入了關鍵詞出現的頻率和位置等信息,這裏就不贅述了。排序後的結果見下表:

關鍵字

編號

***

國家

1,2

中間

簡單來說,lucene的逆向排序就是把分詞映射到文章的位置,按照分詞對這些記錄進行排序。

對於這樣的存儲結構,lucene使用二分搜索法算法進行搜索。這也是lucene高效的原因之壹。

本文簡要介紹了二分搜索法算法:二分搜索法算法或半搜索算法。對於n個元素的數組,二分搜索法算法最多進行1+log2(n)次比較,即有2的n次方個元素,比較最多n+1次。那麽1024 * 1024 * 1024個元素,也就是31次。

關於禁用詞分詞過濾的思考

禁用詞分詞的思路:建立禁用詞詞典,詞元為禁用詞(包括特殊符號,且不考慮正向和反向的最大匹配)。然後,用禁語參與者進行分詞後的逆向排序,就是把禁語映射到文章的位置,按照禁語對這些記錄進行排序。

比如,* * *和中國都是禁語。

第1條和第2條的倒排索引為:

關鍵字

編號

* * *中華民國

顯然,索引記錄的數量等於禁用詞的數量。這樣通過壹次建立倒排索引的過程就可以直接找到目標記錄,可以大大提高計算效率。