我目前正在寻找其他搜索方法,而不是拥有庞大的SQL查询。我最近看过Elasticsearch,并玩过whoosh(搜索引擎的Python实现)。
您能给出选择理由吗?
作为ElasticSearch的创建者,也许我可以为您提供一些理由,说明我为什么继续并首先创建它:)。
使用纯Lucene具有挑战性。如果要使其真正发挥出色,就需要注意很多事情,而且它是一个库,因此没有分布式支持,它只是您需要维护的嵌入式Java库。
就Lucene的可用性而言,我可以追溯到近6年的时间(我创建了Compass)。其目的是简化Lucene的使用并使日常Lucene变得更简单。我一次又一次遇到的问题是能够分发Compass的要求。我开始在Compass中通过与GigaSpaces,Coherence和Terracotta等数据网格解决方案集成来进行处理,但这还不够。
从本质上讲,需要分派分布式Lucene解决方案。此外,随着HTTP和JSON作为无处不在的API的发展,这意味着可以轻松使用具有不同语言的许多不同系统的解决方案。
这就是为什么我继续创建ElasticSearch的原因。它具有非常先进的分布式模型,以JSON原生语言,并公开了许多高级搜索功能,所有功能均通过JSON DSL无缝表达。
Solr还是用于通过HTTP公开索引/搜索服务器的解决方案,但我认为ElasticSearch提供了一种非常出色的分布式模型,并且易于使用(尽管目前缺少某些搜索功能,但是这种功能并没有很长一段时间,在这种情况下,计划是将 Compass的 所有功能都放入ElasticSearch中。当然,自从我创建ElasticSearch以来,我一直抱有偏见,因此您可能需要自己检查一下。
至于Sphinx,我还没有使用过,所以我无法发表评论。我可以向您推荐的是Sphinx论坛上的该线程,我认为它证明了ElasticSearch的出色分布式模型。
当然,ElasticSearch不仅具有分布式功能,还具有更多功能。它实际上是在考虑云的情况下构建的。您可以在网站上查看功能列表。