关于mysql:选择一个独立的全文搜索服务器:Sphinx还是SOLR?

Choosing a stand-alone full-text search server: Sphinx or SOLR?

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

  • 必须作为独立服务器运行,该服务器可以服务于来自多个客户端的搜索请求
  • 必须能够通过索引SQL查询的结果来执行"批量索引":说"从文档中选择ID、文本索引";
  • 必须是免费软件,并且必须以MySQL为数据库在Linux上运行
  • 必须快(排除了MySQL的内部全文搜索)

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

  • Solr(基于Lucene)
  • 弹性搜索(也基于Lucene)
  • 狮身人面像

我的问题:

  • 它们是如何比较的?
  • 我错过了其他选择吗?
  • 我知道每个用例都是不同的,但是在某些情况下,我肯定不想使用某个包吗?


我已经成功使用Solr近两年了,从未使用过斯芬克斯,所以我明显有偏见。但是,我会通过引用医生或其他人来保持客观。我也会把补丁贴到我的答案上:—)

相似之处:

  • 索勒和斯芬克斯都满足你的所有要求。它们速度快,设计用于高效索引和搜索大量数据。
  • 两者都有一长串高流量的网站使用它们(solr,sphinx)
  • 两者都提供商业支持。(索勒,斯芬克斯)
  • 两者都为多个平台/语言(sphinx、solr)提供客户端API绑定。
  • 两者都可以分布以提高速度和容量(斯芬克斯,索尔)

以下是一些区别:

  • Solr是一个Apache项目,显然是获得Apache2许可的。狮身人面像是gplv2。这意味着,如果您需要在商业应用程序中嵌入或扩展(不仅仅是"使用")斯芬克斯,则必须购买商业许可证(基本原理)
  • SOLR很容易嵌入到Java应用程序中。
  • Solr是建立在Lucene之上的,Lucene是一项8年多的成熟技术,拥有庞大的用户群(这只是一个很小的部分)。每当Lucene得到一个新的特性或加速,Solr也会得到它。许多致力于Solr的开发者也是Lucene的支持者。
  • sphinx与RDBMS集成得更紧密,尤其是mysql。
  • Solr可以与Hadoop集成以构建分布式应用程序
  • Solr可以与Nutch集成,以使用Crawler快速构建一个成熟的Web搜索引擎。
  • Solr可以索引专有格式,如Microsoft Word、PDF等。Sphinx不能。
  • 索尔从盒子里拿出一个拼写检查器。
  • Solr提供了现成的方面支持。狮身人面像的刻面需要更多的工作。
  • Sphinx不允许对字段数据进行部分索引更新。
  • 在sphinx中,所有文档ID都必须是唯一的无符号非零整数。对于许多操作,solr甚至不需要唯一键,唯一键可以是整数或字符串。
  • Solr支持字段折叠(目前仅作为附加补丁),以避免重复类似的结果。斯芬克斯似乎没有提供任何这样的功能。
  • 虽然sphinx的设计仅用于检索文档ID,但在solr中,您可以直接获取包含几乎所有类型数据的整个文档,使其更独立于任何外部数据存储,并节省了额外的往返时间。
  • SOLR,除了使用嵌入式时,运行在Java Web容器中,如Tomcat或JeTy,需要额外的特定配置和调整(或者您可以使用包含的JETTY并用EDCOX1(0)来启动它)。斯芬克斯没有额外的配置。

相关问题:

  • 使用Rails进行全文搜索
  • 全文搜索引擎比较-Lucene,Sphinx,PostgreSQL,MySQL?


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

斯芬克斯优势:

  • 开发和设置更快
  • 更好(更快)的聚合。这是我们的杀手特征。
  • 不是XML。这就是最终排除索尔对我们的影响的原因。我们必须返回相当大的结果集(考虑数百个结果),然后自己对它们进行聚合,因为缺少solr聚合。在XML中序列化和从XML序列化所需的时间完全会破坏性能。但是对于小的结果集来说,这是非常好的。
  • 我在开源应用程序中看到的最佳文档
  • Solr优势:

  • 可以扩展。
  • 可以从Web应用程序直接点击它,也就是说,您可以让类似自动完成的搜索通过Ajax直接点击Solr服务器。

  • 注意:有很多用户都有相同的问题。

    因此,要回答这一点:

    为什么呢?

    • 如果您打算在Web应用程序中使用它,请使用solr(例如,网站搜索引擎)。多亏了它的API,它肯定会变得很棒。对于一个网络应用程序,你肯定需要这种能力。

    • 如果你想快速搜索成吨的文档/文件,可以使用狮身人面像。它的指数也很快。我建议不要在涉及JSON或解析XML以获取搜索结果的应用程序中使用它。用于直接数据库搜索。它在MySQL上工作得很好。

    选择

    虽然这些都是巨人,但还有很多。此外,还有一些人使用这些来为他们的定制框架提供动力。所以,我想说你真的没有错过任何东西。尽管有一个弹性搜索具有良好的用户基础。


    我用狮身人面像已经快一年了,这太神奇了。我可以在一分钟内在我的MacBook上索引150万个文档,在服务器上甚至更快。我也在使用狮身人面像限制搜索特定纬度和经度范围内的地方,而且搜索速度非常快。此外,如何对结果进行排名也非常容易调整。如果您阅读了一两个教程,安装简单。几乎是1.0的状态,但他们的发布候选一直坚如磐石。


    Lucene/Solr似乎更具特色,业务年限更长,用户社区更强大。imho如果你能克服最初的设置问题,就像有些人(不是我们)所面临的那样,那么我会说Lucene/Solr是你最好的选择。