【发布时间】:2014-03-19 05:37:47
【问题描述】:
目前 MongoDB 的全文搜索与 Lucene 相比如何?这个问题的原因是由于我不确定:
a) 在生产中使用 mongo 的 FTS 实现,因为大约 6 个月前它仍处于测试阶段
和
b) 因为 lucene 使用 Java,这将引入另一个移动部分。
【问题讨论】:
-
明确一点,Lucene 不仅仅在 Java 环境中工作。 .NET 和 C++ 版本也可用。
目前 MongoDB 的全文搜索与 Lucene 相比如何?这个问题的原因是由于我不确定:
a) 在生产中使用 mongo 的 FTS 实现,因为大约 6 个月前它仍处于测试阶段
和
b) 因为 lucene 使用 Java,这将引入另一个移动部分。
【问题讨论】:
在不纠结于可能不适合编程论坛的冗长主题的情况下,我将尝试基本涵盖这一点,但仍会尝试涵盖要点。
进行广泛比较时要考虑的主要问题是:“'XYZ' 关系数据库引擎全文搜索如何与 Lucene 相提并论”。
因此,如果您考虑到这一点,并且已经体验过这些产品的内置“全文”功能,那么您应该将这些苹果与 MongoDB“全文”苹果进行比较。
简而言之,MongoDB 提供了基本的全文功能,与关系产品中的功能没有太大区别。正如 a:) 中提到的,设施是新的,但比以前的设施要好,这没什么。
在 b:) 上,Lucene 和衍生品/对应物(Solr / ElasticSearch 等)应该被视为完全不同的动物。在您需要高级标记化和词干提取的地方,内置用于“更像这样”和方面计数的搜索功能。在这些情况下,单独的产品是必需的。
当然,有几种解决方案可以从 Lucene 等中的 MongoDB 存储中索引数据,甚至自定义这个过程也不难。但它正在维护您的基础架构中的另一个活动部分。
所以我并不认为这需要比较 MongoDB 文本搜索与 Lucene,因为最终它们的存在是为了做不同的事情,这只是一个问题您的应用程序需要。选择最适合您的解决方案。
唯一要补充的是,Lucene(及其衍生产品)系列是很棒的产品。不要回避试一试,至少要评估一下。前面的要点是那里比任何“标准数据库文本搜索”都强大得多。此外,管理和学习曲线通常“没有你想象的那么难”。玩一玩,可能值得实施。
【讨论】:
长话短说:是的,Lucene (Solr/ElasticSearch) 是另一个动人的部分。你必须知道,我讨厌在我的系统中添加移动部件。我会做任何事情来避免它。但是,如果您想在您的应用程序中支持超越简单(简单!)全文搜索的搜索那么您需要 Lucene。我向你保证,当你习惯了它,你永远不会(永远!)会再次错过它。
所以简单的建议是:试试看!你不会后悔的。
【讨论】: