何时应该选择使用Apache Lucene而不是Solr?

18

使用Solr 1.4有几个优点(开箱即用的切面搜索、分组、复制、http管理与luke相比等)。

即使我在我的Java应用程序中嵌入了搜索功能,我也可以使用 SolrJ 避免在使用Solr时出现HTTP交换。您是否建议使用SolrJ?

那么,何时建议使用“纯Lucene”?它的性能更好还是需要更少的RAM?它是否更易于单元测试?

PS:我知道这个问题


1
这里有其他的“比较”:http://www.lucenetutorial.com/lucene-vs-solr.html 和 http://www.lucidimagination.com/solutions/software/choosing-lucene-solr - Karussell
请再次查看http://www.findbestopensource.com/article-detail/lucene-vs-solr。 - Karussell
5个回答

6

如果您有一个网络应用程序,请使用Solr - 我尝试过将两者集成,Solr更容易。否则,如果您不需要Solr的功能(最重要的是分面搜索),那么请使用Lucene。


你是用SolrJ还是HTTP方法?我曾试过在Web应用程序中嵌入Lucene,这很容易。 - Karussell
我使用了Solrj,所以我不需要在应用程序内部进行HTTP请求。老实说,我无法记住是什么让它变得困难,也许我在某个地方做了一些愚蠢的事情。 - James Kingsbery
谢谢回复。关于单元测试,像我在Lucene中做的那样设置RAMDirectory容易吗? - Karussell
我没有尝试过,但显然是可能的:http://search.lucidimagination.com/search/out?u=https%3A%2F%2Fissues.apache.org%2Fjira%2Fbrowse%2FSOLR-465 - James Kingsbery
Lucene支持分面搜索,但它与Solr提供的功能非常不同。在upsert时,您需要为每个文档编写一个分类法(将其视为二级倒排索引)。查询也是不同的。您需要使用facet术语并收集facet结果。 - Glenn

5

如果您想完全将搜索功能嵌入应用程序中,而不想维护像Solr这样的单独进程,则使用Lucene可能更可取。例如,桌面应用程序可能需要一些搜索功能(例如Eclipse IDE使用Lucene搜索其文档)。您可能不希望此类应用程序启动像Solr这样的重型进程。


你所说的“重”是指CPU/RAM还是维护方面? - Karussell
就物理资源而言,是的。此外,Solr 的启动时间可能在桌面应用程序中不可接受。 - Pascal Dimassimo
1
但我从未尝试过EmbeddedSolrServer。这可能是一种有趣的嵌入式Solr方式。 - Pascal Dimassimo

2
这里有一个我必须使用Lucene的情况。
给定一组文档,找出其中最常见的术语。在这里,我需要访问每个文档的术语向量(使用TermVectorMapper的低级API)。使用Lucene相当容易。
另一个用例是非常专业化的搜索结果排序。例如,我想要按作者名称(写了多本书的作者)搜索结果,在前10个结果中得到每个商店的一本书。在这种情况下,我将从每家书店中找到结果,并选择每家书店中的一个结果来显示最终结果。在这里,您实际上正在执行多个搜索以生成最终结果。访问Lucene的底层API肯定有助于解决问题。
选择Lucene的另一个原因是尽快获得新功能。由于它们已经合并,并且将有同步发布,所以这不再是真的。

关于TermVectorMapper->您是否知道Solr是否支持?关于搜索顺序示例:是否可以使用Solr的分组功能完成此操作:http://blog.jteam.nl/2009/10/20/result-grouping-field-collapsing-with-solr/ - Karussell
TVMapper是Lucene的核心。为什么要经过额外的层,当你可以直接从源头读取呢?而且我并不是特别需要分组。我想要来自每个书店的所有结果,但我希望顺序是一个近似于轮询的顺序,并带有一些附加条件。 - Shashikant Kore

2

我很惊讶没有人提到NRT - 近实时搜索,它可以在Lucene中使用,但目前还不能在Solr中使用。


真的吗?这里是链接 http://wiki.apache.org/lucene-java/NearRealtimeSearch ... 我觉得 Solr 也可以使用。 - Karussell

0
如果您更关注可扩展性而非性能,则使用Solr;如果您更关注性能而非可扩展性,则使用Lucene。

这个问题已经有4年了......可以看一下ElasticSearch! - Karussell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接