2010-03-30 113 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的一样。