选择独立的全文搜索服务器:Sphinx还是SOLR?

kno*_*orv 192 mysql lucene solr full-text-search sphinx

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

  • 必须作为可以为多个客户端提供搜索请求的独立服务器运行
  • 必须能够通过索引SQL查询的结果来进行"批量索引":例如"SELECT id,text_to_index FROM documents;"
  • 必须是免费软件,必须在Linux上以MySQL作为数据库运行
  • 必须快(排除MySQL的内部全文搜索)

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

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

我的问题:

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

Mau*_*fer 327

我已经成功使用Solr近2年了,并且从未使用过Sphinx,所以我显然有偏见.但是,我会尝试通过引用文档或其他人来保持客观.我还会给我的答案补丁:-)

相似点:

  • Solr和Sphinx都满足您的所有要求.它们速度快,旨在有效地索引和搜索大量数据.
  • 两者都有很多使用它们的高流量网站(Solr,Sphinx)
  • 两者都提供商业支持.(Solr,Sphinx)
  • 两者都为多种平台/语言提供客户端API绑定(Sphinx,Solr)
  • 两者都可以分发以提高速度和容量(Sphinx,Solr)

以下是一些差异:

相关问题:

  • 谈到开发人员对Solr和Lucene的承诺,似乎他们已经合并了这两种产品,使得进一步开发更容易,更快 - http://www.lucidimagination.com/blog/2010/03/26/lucene-and-solr-development - 具备-合并/. (4认同)
  • @Stann:怎么回事?我在近5年前使用过Solr,从不需要编写单行Java. (3认同)
  • @Stann:你真的认为你需要比whitehouse.gov,Netflix,The Guardian,digg更多的表现,仅举几个使用Solr的网站?http://wiki.apache.org/solr/PublicServers (3认同)
  • [这是关于Sphinx的答案](http://stackoverflow.com/questions/737275/comparison-of-full-text-search-engine-lucene-sphinx-postgresql-mysql)这是一个很好的配对这个答案Solr的 (3认同)

lar*_*311 48

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

狮身人面像的优点:

  1. 开发和设置更快
  2. 更好(和更快)的聚合.这对我们来说是一个杀手锏.
  3. 不是XML.这就是最终为我们排除Solr的原因.我们必须返回相当大的结果集(想想数百个结果)然后自己聚合它们,因为缺少Solr聚合.与XML序列化的时间绝对会破坏性能.但对于小型结果集,它完全没问题.
  4. 我在开源应用程序中看到的最佳文档

Solr优势:

  1. 可以延长.
  2. 可以直接从Web应用程序中获取它,也就是说,您可以通过AJAX直接在Solr服务器上进行自动完成搜索.

  • Solr有许多除xml以外的响应编写器,包括JSON,PHP,Ruby,Python和java二进制格式:http://lucene.apache.org/solr/api/org/apache/solr/request/QueryResponseWriter.html (29认同)
  • 我有没有提到Solr/Lucene文档有多糟糕?必须通过Javadocs来确定功能并不是我对文档的想法. (23认同)
  • 我应该链接到wiki:http://wiki.apache.org/solr/QueryResponseWriter#head-e82d899e83a861380fb6d0c34c1228a2f79f6c98 (3认同)
  • 我花了整整一天在我的mac上修复sphinx 0.9.9的安装错误.到目前为止,它仍然无法正常工作.它太错了.我建议使用很多方法.我真的很沮丧... (2认同)

Aug*_*wan 21

注意:有许多用户考虑到相同的问题.

所以,回答这一点:

哪个以及为什么?

  • 如果您打算在Web应用程序(示例站点搜索引擎)中使用Solr,请使用Solr.由于它的API,它肯定会变得很棒.你肯定需要为网络应用程序提供这种能力.

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

备择方案

虽然这些都是巨人,但还有更多.此外,有些人使用这些来支持他们的自定义框架.所以,我会说你真的没有错过任何一个.虽然有一个弹性搜索具有良好的用户群.

  • 那个尴尬的时刻,当我在一年半之后阅读这个答案并点击upvote并看到我自己写了这个答案.大声笑.:DA除此之外的一小部分:18个月后,elasticsearch已成为一个很好的选择,并且拥有一个体面的社区.酷,盆景很酷! (13认同)

lo_*_*fye 19

我已经使用Sphinx差不多一年了,而且一直很棒.我可以在MacBook上大约一分钟索引150万个文档,甚至可以在服务器上更快.我也在使用Sphinx将搜索限制在特定纬度和经度的范围内,而且速度非常快.此外,如何排名结果是非常可调整的.如果您阅读一两个教程,便于安装和设置.几乎是1.0的状态,但他们的候选人一直坚如磐石.

  • 可以使用LocalSolr插件在Solr中进行地理搜索:http://www.gissearch.com/localsolr (3认同)