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是您的最佳选择。
斯芬克斯优势:
Solr优势:
注意:有很多用户都有相同的问题。
因此,要回答这一点:
为什么呢?
如果您打算在Web应用程序中使用它,请使用solr(例如,网站搜索引擎)。多亏了它的API,它肯定会变得很棒。对于一个网络应用程序,你肯定需要这种能力。
如果你想快速搜索成吨的文档/文件,可以使用狮身人面像。它的指数也很快。我建议不要在涉及JSON或解析XML以获取搜索结果的应用程序中使用它。用于直接数据库搜索。它在MySQL上工作得很好。
选择
虽然这些都是巨人,但还有很多。此外,还有一些人使用这些来为他们的定制框架提供动力。所以,我想说你真的没有错过任何东西。尽管有一个弹性搜索具有良好的用户基础。
我用狮身人面像已经快一年了,这太神奇了。我可以在一分钟内在我的MacBook上索引150万个文档,在服务器上甚至更快。我也在使用狮身人面像限制搜索特定纬度和经度范围内的地方,而且搜索速度非常快。此外,如何对结果进行排名也非常容易调整。如果您阅读了一两个教程,安装简单。几乎是1.0的状态,但他们的发布候选一直坚如磐石。
Lucene/Solr似乎更具特色,业务年限更长,用户社区更强大。imho如果你能克服最初的设置问题,就像有些人(不是我们)所面临的那样,那么我会说Lucene/Solr是你最好的选择。