about Lucene
Lucene是開放源代碼的全文搜索引擎工具包,憑借著其強勁的搜索功能和簡單易用的實現,在國內已經很普及,甚至一度出現了言搜索必稱Lucene的盛景。上個月Lucene的開發團隊發布了 Java Lucene 2.3.1 ,相信很多朋友們都用上了。在國內對Lucene的介紹可以分為3塊兒:第一類是:以車東 的Lucene:基於Java的全文檢索引擎簡介 為代表的基礎入門介紹;
第二類是Lucene倒排索引原理和Lucene軟件包、實現類的介紹;
第三類是以中文分詞為中心的介紹;
任何一個軟件,包括所有偉大的軟件都有這樣或者那樣的“缺點”和各自適用的領域,Lucene也不例外。在國內對Lucene這個軟件包的批評,似乎沒有 看到過。可能大家都忙於做項目,縱然Lucene有再大的缺陷,憑借著Lucene良好的口碑,也不會說上一句不是。
今天在閱讀LingWay (一個做垂直的語義搜索引擎)的CTO Cedric Champeau 先生的博客是發現有一篇題為:Why lucene isn't that good 為什麼Lucene並不是想象的那麼棒 的文章:Champeau 開門見山指出了Lucene的6大不足之處,鑒於 Lingway 公司使用Lucene已有好幾年的曆史,我相信Cedric Champeau的對Lucene的評論還是值得一讀。
不選擇使用Lucene的6大原因:
6、Lucene 的內建不支持群集。
Lucene是作為嵌入式的工具包的形式出現的,在核心代碼上沒有提供對群集的支持。實現對Lucene的群集有三種方式:1、繼承實現一個 Directory;2、使用Solr 3、使用 Nutch+Hadoop;使用Solr你不得不用他的Index Server ,而使用Nutch你又不得不集成抓取的模塊;
5、區間範圍搜索速度非常緩慢;
Lucene的區間範圍搜索,不是一開始就提供的是後來才加上的。對於在單個文檔中term出現比較多的情況,搜索速度會變得很慢。因此作者稱Lucene是一個高效的全文搜索引擎,其高效僅限於提供基本布爾查詢 boolean queries;
4、排序算法的實現不是可插拔的,因為貫穿Lucene的排序算法的tf/idf 的實現,盡管term是可以設置boost或者擴展Lucene的Query類,但是對於複雜的排序算法定製還是有很大的局限性;
3、Lucene的結構設計不好;
Lucene的OO設計的非常糟,盡管有包package和類class,但是Lucene的設計基本上沒有設計模式的身影。這是不是c或者c++程序員寫java程序的通病?
A、Lucene中沒有使用接口Interface,比如Query 類( BooleanQuery, SpanQuery, TermQuery...) 大都是從超類中繼承下來的;
B、Lucene的迭代實現不自然: 沒有hasNext() 方法, next() 返回一個布爾值 boolean然後刷新對象的上下文;
2、封閉設計的API使得擴展Lucene變得很困難;
參考第3點;
1、Lucene的搜索算法不適用於網格計算;
詳情可以查看:Cedric Champeau 先生的博客:Why lucene isn't that good 為什麼Lucene並不是想象的那麼棒
最後更新:2017-04-02 00:06:32