select一个独立的全文search服务器:Sphinx或SOLR?

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

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

我发现有这些属性的替代品是:

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

我的问题:

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

我已经成功使用Solr将近2年了,从来没有使用狮身人面像,所以我显然有偏见。 不过,我会尽量通过引用文档或其他人来保持客观。 我也会给我的答案补丁:-)

相似点:

  • Solr和狮身人面像满足您的所有要求。 它们速度很快,旨在有效地索引和search大量数据。
  • 这两个网站都有很长的高stream量网站( Solr , Sphinx )
  • 两者都提供商业支持。 ( Solr , 狮身人面像 )
  • 两者都为几种平台/语言提供客户端API绑定( Sphinx , Solr )
  • 两者都可以分配来提高速度和容量( Sphinx , Solr )

这里有一些区别:

  • 作为Apache项目的Solr显然是Apache2许可的。 狮身人面像是GPLv2 。 这意味着,如果您需要在商业应用程序中embedded或扩展(不仅仅是“使用”)狮身人面像,您必须购买商业许可证( 基本原理 )
  • Solr很容易embedded到Java应用程序中。
  • Solrbuild立在Lucene之上,这是一个已有8年历史的技术,拥有庞大的用户群 (这只是一小部分)。 每当Lucene获得新的特性或加速时,Solr也得到它。 许多向Solr提交的开发者也是Lucene提交者。
  • Sphinx与RDBMSs更紧密地集成,特别是MySQL。
  • Solr可以与Hadoop集成以构build分布式应用程序
  • Solr可以与Nutch集成,以快速build立一个爬行器完整的networkingsearch引擎 。
  • Solr可以索引Microsoft Word,PDF等专有格式 。 狮身人面像不能 。
  • Solr自带了一个拼写检查器 。
  • Solr提供了方框支持 。 在狮身人面像刻面需要更多的工作 。
  • 狮身人面像不允许部分索引更新字段数据 。
  • 在狮身人面像中, 所有文档ID必须是唯一的无符号的非零整数 。 Solr 甚至不需要许多操作的唯一键,唯一的键可以是整数或string。
  • Solr支持字段折叠 (目前仅作为附加补丁)以避免重复类似的结果。 狮身人面像似乎没有提供任何这样的function。
  • 尽pipeSphinx仅用于检索文档ID ,但在Solr中,您可以直接获取具有几乎任何types数据的整个文档,使其更加独立于任何外部数据存储,并节省了额外的往返。
  • 除了使用embedded式以外,Solr运行在Java Web容器 (如Tomcat或Jetty)中,这些容器需要额外的特定configuration和调整 (或者您可以使用附带的Jetty并使用java -jar start.jar启动它)。 狮身人面像没有额外的configuration。

相关问题:

  • 全文search使用Rails
  • 全文search引擎比较 – Lucene,Sphinx,Postgresql,MySQL?

除非您需要以任何专有方式扩展searchfunction,否则Sphinx是您最好的select。

狮身人面像的优点:

  1. 开发和设置速度更快
  2. 更好(更快)的聚合。 这是我们的杀手锏。
  3. 不是XML。 这是最终排除Solr对我们来说。 我们不得不返回相当大的结果集(认为数以百计的结果),然后自我聚合,因为Solr聚合是缺乏的。 序列化到XML和从XML序列化的时间只是完全丧失了性能。 对于小的结果集,它是完全正确的。
  4. 我在开源应用程序中看到的最佳文档

Solr的优点:

  1. 可以扩展。
  2. 可以直接从networking应用程序中直接点击它,也就是说,您可以通过AJAX直接通过类似于自动完成的search直接访问Solr服务器。

注意:有许多用户在考虑同一个问题。

所以,要回答这个问题:

哪个和为什么?

  • 如果您打算在您的networking应用程序(示例站点search引擎)中使用Solr ,请使用Solr 。 它肯定会变得很好,这要归功于它的API。 你一定会需要这个权力的networking应用程序。

  • 如果你想快速search大量的文件/文件,使用狮身人面像 。 它也索引真正快。 我build议不要在涉及JSON或parsingXML的应用程序中使用它来获取search结果。 用它直接dBsearch。 它在MySQL上效果很好。

备择scheme

虽然这些是巨人,还有更多。 此外,还有那些使用这些来支持他们的定制框架。 所以,我会说,你真的没有错过任何。 虽然有一个elasticsearch具有良好的用户群。

近一年来我一直在使用狮身人面像,而且令人惊叹。 我可以在我的MacBook上大约一分钟索引150万份文档,甚至在服务器上更快。 我也使用狮身人面像将search限制在特定纬度和经度范围内的地点,速度非常快。 另外,结果如何排名是非常可调的。 易于安装和设置,如果你阅读一两个教程。 几乎1.0的状态,但他们的候选人已经坚如磐石。

Lucene / Solr似乎更具特色,业务时间更长,用户群更强大。 恕我直言,如果你可以通过一些似乎已经面临的(而不是我们)的初始设置问题,那么我会说Lucene / Solr是你最好的select。