T-Wand演算法用不到 600 行程式碼擊敗 Lucene - yyhh

banq發表於2021-11-17

Lucene 速度非常快,因為它使用了一種最先進的搜尋演算法WAND [1]。這是WAND 的工作原理。

它作弊。

好吧,任何足夠先進的演算法看起來都像是作弊。WAND也不例外。基本上,它跳過了大部分文件集合,並且安全地跳過它們,這意味著如果在不跳過的情況下詳盡地進行完整計算,結果將是相同的。它能夠通過使用兩個技巧安全地跳過文件。

第一個技巧是最巧妙的。我仍然不知道我在 IBM Research 的前同事是如何想出它的。我向他們致敬。讓我從後續文章 [2] 中竊取一張圖片來說明這一點。

T-Wand演算法用不到 600 行程式碼擊敗 Lucene - yyhh

第二個技巧是使用假設的最大可能分數來過濾潛在候選人而無需全面檢查他們的想法

.....

 

我說輕鬆擊敗 Lucene,因為我們沒有做任何 Lucene 中豐富的極端優化。我們的程式碼是慣用的 Clojure,在關鍵效能熱點處有一些 Java 資料結構的額外幫助。程式碼少於 600 行,包括註釋。

這是向Datalevin新增全文搜尋功能,這是我們去年開源的 Datalog 資料庫。今天完成了搜尋引擎的主要工作,和老牌的Java搜尋庫Apache Lucene進行了一些基準比較,發現Datalevin搜尋引擎平均比Lucene快75%,平均快3倍。

詳細點選標題

相關文章