选择独立的全文本搜索服务器:Sphinx还是SOLR?[关闭]


192

我正在寻找具有以下属性的独立全文搜索服务器:

  • 必须作为独立服务器运行,可以处理来自多个客户端的搜索请求
  • 必须能够通过对SQL查询的结果建立索引来进行“批量索引”:说“ SELECT id,text_to_index FROM document;”
  • 必须是免费软件,并且必须在以MySQL作为数据库的Linux上运行
  • 必须快速(排除MySQL的内部全文搜索)

我发现具有这些属性的替代方法是:

  • Solr(基于Lucene)
  • ElasticSearch(也基于Lucene)
  • 狮身人面像

我的问题:

  • 他们如何比较?
  • 我有没有其他选择吗?
  • 我知道,每个用例是不同的,但是否有某些情况下,我肯定希望使用某个软件包?

1
您是否排除了直接使用Lucene?Solr是在Lucene之上的服务,因此直接使用Lucene可能会更加困难。
戴夫

Lucene是否具有独立服务器模式?我以为那是SOLR添加的内容之一?我没有排除任何问题-如果考虑到要求,这是最好的选择,请随时主张Lucene :-)
knorv

mausch:主要是Java,但也有其他语言。
knorv

我个人喜欢Sphinx。但是,在最近的一个“大型”项目中,最新的候选版本(0.9.9-rc2)在使用多值数组(MVA)时显示了阻止程序错误。它将是随机结果!因此,我们转而使用SOLR来解决此问题。一旦SOLR启动并运行,性能就会很好,并且没有show stopper bug。
pchap10k

2
您看过elasticsearch.com吗?
2011年

Answers:


327

我已经成功使用Solr近两年了,并且从未使用过Sphinx,因此我显然有偏见。但是,我将通过引用文档或其他人来尝试保持客观。我还将为我的答案打补丁:-)

相似之处:

  • Solr和Sphinx都可以满足您的所有要求。它们速度很快,旨在高效地索引和搜索大量数据。
  • 两者都有使用它们的高流量站点的一长串(SolrSphinx
  • 两者都提供商业支持。(Solr狮身人面像
  • 两者都提供用于多种平台/语言(SphinxSolr)的客户端API绑定
  • 两者都可以分布以提高速度和容量(SphinxSolr

这里有一些区别:

相关问题:


4
在谈到致力于Solr和Lucene的开发人员时,似乎他们已经合并了这两种产品,从而使进一步的开发变得更加容易和快捷-lucidimagination.com/blog/2010/03/26/…
jimmystormig 2011年

3
@斯坦:如何?我使用Solr已有近5年的时间了,不需要编写任何Java代码。
Mauricio Scheffer

@MauricioScheffer您是否真的认为Java代码会比C ++更快。这是Bill Karwin和Sphinx进行的比较,那里的查询速度比Lucene快10倍(而Solr的
Stann

3
@Stann:您真的认为您需要比whitehouse.gov,Netflix,The Guardian和digg更高的性能,仅举几个使用Solr的网站?wiki.apache.org/solr/PublicServers
Mauricio Scheffer

3
这是一个关于狮身人面像的答案,这是对Solr的一个很好的答案
New Alexandria

48

除非您需要以任何专有方式扩展搜索功能,否则Sphinx是您的最佳选择。

Sphinx的优点:

  1. 开发和设置更快
  2. 更好(更快)的聚合。这是我们的杀手feature。
  3. 不是XML。这就是最终将Solr排除在我们之外的原因。由于缺少Solr聚合,我们必须返回相当大的结果集(考虑数百个结果),然后自己对其进行聚合。与XML进行串行化和从XML进行串行化所花费的时间绝对是绝对的性能。但是对于较小的结果集,这是完全可以的。
  4. 我在开源应用程序中看到的最佳文档

Solr的优点:

  1. 可以扩展。
  2. 可以直接从Web应用程序中命中它,即,您可以通过AJAX直接在Solr服务器上进行类似自动完成的搜索。

29
Solr除了XML之外,还有许多响应编写器,包括JSON,PHP,Ruby,Python和Java二进制格式:lucene.apache.org/solr/api/org/apache/solr/request/…–
Mauricio Scheffer

24
我是否提到过Solr / Lucene文档的糟糕程度?必须扎根Javadocs来确定功能不是我写文档的想法。
larf311,2009年

3
我应该链接到维基:wiki.apache.org/solr/...
毛里西奥·雅伯

2
我整天都在Mac上修复了sphinx 0.9.9的一些安装错误。到目前为止,它仍然无法正常工作。太越野了。我用了很多建议的方式。我感到非常沮丧...
lkahtz 2011年

solr的文档不如狮身人面像。但是社区很大。而且我总是可以通过阅读solr的源代码了解所有内容。
泰勒·朗

21

注意:有许多用户在考虑相同的问题。

因此,要回答这一点:

哪个以及为什么?

  • 如果您打算在Web应用程序(示例站点搜索引擎)中使用它,请使用Solr。归功于它的API,它肯定会很棒。对于Web应用程序,您肯定需要这种功能。

  • 如果您想快速搜索大量文档/文件,请使用Sphinx。它也能快速索引真正的索引。我建议不要在涉及JSON或解析XML来获取搜索结果的应用程序中使用它。将其用于直接dB搜索。它在MySQL上效果很好。

备择方案

尽管这些都是巨头,但还有更多。此外,有些使用它们来支持其自定义框架的工具。因此,我想说您真的没有错过任何一个。尽管有一种Elasticsearch具有良好的用户群。


13
一年半之后,当我阅读此答案并单击upvote时,看到了我自己写的答案,这很尴尬。大声笑。:DA不过,这还不算什么:在18个月后,elasticsearch被证明是一个不错的选择,并且拥有一个不错的社区。凉,盆景凉!
2013年

奥古斯都!那尴尬的时刻:D。因此,对于python网络应用程序,您认为现在最好的是什么?基于性能,内存使用情况和易于设置的想法进行Solr或弹性搜索?
Mevin Babu 2014年

Web应用程序使用哪种语言都没关系。请根据您的用例进行选择!
Augiwan 2014年

19

我使用Sphinx已经快一年了,这真是太棒了。我可以在一分钟左右的MacBook上索引150万个文档,而在服务器上则更快。我还使用Sphinx将搜索范围限制在特定纬度和经度之内,而且速度非常快。此外,结果的排名方式也非常可调整。如果您阅读一两个教程,则易于安装和设置。几乎是1.0状态,但他们的发布候选者坚如磐石。


3
可以使用LocalSolr插件在Solr中进行地理搜索:gissearch.com/localsolr
Mauricio Scheffer,2009年

1
您可以在一分钟内索引150万个文档吗?我什至无法读到这么多-直接从SSD上的7zip文件(不写入,也不输出到控制台)中!那是2017年!这些是什么样的文件?太不可思议了。注意:我希望您不是要在一分钟内搜索 150万个索引。带有150万份文档的索引搜索仍然会在几秒钟内返回(即使在2009年)。
FastAl

2

Lucene / Solr似乎功能更强大,并且具有更长的业务寿命和更强大的用户社区。恕我直言,如果您能够解决一些似乎已经遇到的初始设置问题(不是我们),那么我想说Lucene / Solr是您最好的选择。


用户社区是重要的一点。Sphinx论坛中有几个非常非常有帮助的人,但除此之外没有一个强大的社区。
mlissner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.