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