2010-03-30 116 views
34

在一個新項目中,我需要使用lucene來實現搜索器。這個搜索者將是這個項目中非常重要的一部分。用MongoDb代替Relational Database + Lucene是否有效或方便?MongoDB是關係數據庫+ lucene的有效替代方案嗎?

編輯:好的,我會澄清:我不是在問風險,我可以在這個項目中支付這個價格。我的觀點是:MongoDB面向這種事情嗎?我可以製作一個完整的搜索引擎,其性能與Lucene相同嗎?一位朋友指出我可以選擇MongoDB作爲替代方案,但我不知道Lucene性能是否與文檔替代方案一起提供(然後,我也會在MongoDB中看到它),或者,另一方面,倒排索引和optimitizations是完整的獨立於文件方向。

+0

我的2美分:我會採取componented方法,在其中您可以更改基礎數據源後,可能 – 2010-03-30 15:58:06

+1

好吧,我會澄清:我不要求對風險,我可以付出這樣的代價在這個項目。我的觀點是:MongoDB面向這種事情嗎?我可以製作一個完整的搜索引擎,其性能與Lucene相同嗎? 有朋友指出我的MongoDB出來作爲替代,但我沒有看到,如果Lucene的性能自帶的文件替代(然後,我會看到它在MongoDB中太),或在另一方面,倒排索引和optimitizations是完成文檔定位的獨立性。 – Hugo 2010-03-30 16:00:37

回答

1

我不熟悉MongoDB,所以我不能直接回答這個問題,但我想指出,不像Lucene(這是大約十歲)和關係數據庫(已經存在幾十年)不同,MongoDB是不到三歲。

在這個遊戲階段,它很可能還在成熟。它可能適合您的需求(我很好奇,看看是否有人熟悉使用它會在這裏發出響聲),但是您需要將這個因素納入您的等式中。你是否願意爲使用尖端技術付出代價?

即使它變得足夠穩定和高效,您可能會遇到網站/教程等形式的支持受限(由於用戶基數較少)的問題。你也有機會停止使用它。

抓住這個機會是值得的,但是你需要睜大眼睛,不要被「哦,看看閃亮的新玩具」效果所矇蔽。

+0

肯定克里斯,我注意到,在這個特殊情況下,我可以支付這個價格。 謝謝。 – Hugo 2010-03-30 15:48:43

+0

如果玩具停止使用,他總是可以將數據移動到RDBMS :) – 2010-08-25 00:57:29

-7

不,它不是,因爲MongoDB不是關係型的。

0

Lucene是一個既定和穩定的產品。唉,MongoDB的情況也是如此。所以我認爲Lucene加上RDBMS是一個風險小得多的選擇。

當然,這在一定程度上取決於項目的性質:「非常重要(而且很重要)」有多重要?另一件事是,你有沒有MongoDB的經驗(我猜不是)?如果你可以接觸到具有一定專業知識的人,那麼這可以降低風險。

2

Look的可能,但速度較慢(see here

  • 你將不得不做分詞和詞幹你的自我。
  • 排名查詢的「需要用戶提供的代碼這樣做」
19

從技術上講,你可以做全文搜索與MongoDB的,但你在很多是全文搜索服務提供商所提供的錯過了。我喜歡MongoDB,但是如果需要時間來執行,我會將它與全文搜索提供程序(如Lucene或Sphinx)結合使用。我認爲MongoDB對索引數組索引的方便能力最好留在基於標記的標記和搜索上,而不是全文搜索。

搜索(信息檢索)不僅僅是抓取任何匹配的文檔,如果你希望你的搜索結果具有任何相關性,你將需要一些類似於TF-IDF,短語匹配一個序列中的單詞得分較高)或其他任何數量的IR技術來提高搜索精度。如果你使用MongoDB,你需要從頭開始實現它。

如果你真的想從頭開始實現它,但不用擔心存儲的原始存儲方面,MongoDB非常接近你可以在其上實現它的最好的DB存儲(很多其他),但這仍然不是一個很好的選擇。

2

MongoDB是一個NOSQL,Lucene和SOLR是搜索引擎,並加入另一件事比較像陶土緩存與一起的Ehcache。所有人都有自己的目的。

如果全文搜索沿着搜索需要與詞幹,相關的設置,如顯示的排名比desctription文本匹配,以及許多基於這樣的文本特徵更在產品標題與文字匹配的結果。還有排名,相關性,聲調相似,部分詞匹配等。所有這些事情最好通過像SOLR和Lucene這樣基於搜索的存儲系統來處理。

如果你的標準是唯一的fater檢索和你不需要演示文稿的數據對象是持久的,然後只需使用一個緩存艾克陶土。

如果需要更快的檢索,也需要colloborate和一個數據源彙總數據,並且還需要一個聚集的數據是持久的,然後使用NOSQL MongoDB的一樣。