ElasticSearch,狮身人面像,Lucene,Solr,Xapian。 哪种适合哪种用法?
我目前正在寻找其他搜索方法,而不是有一个巨大的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论坛上,我认为它证明了ElasticSearch卓越的分布式模型。
当然,ElasticSearch有更多的功能,然后才分发。 它实际上是在考虑云的基础上构建的。 您可以检查网站上的功能列表。
我们经常使用Lucene来索引和搜索数以千万计的文档。 搜索速度足够快,我们使用不需要很长时间的增量更新。 它确实需要我们一些时间才能到达这里。 Lucene的优势在于其可扩展性,多种功能以及活跃的开发人员社区。 使用裸露的Lucene需要用Java进行编程。
如果你重新开始,Lucene系列中的工具是Solr,它比裸露的Lucene更容易设置,并且几乎具有Lucene的全部功能。 它可以轻松导入数据库文件。 Solr是用Java编写的,因此对Solr的任何修改都需要Java知识,但只需调整配置文件即可完成很多工作。
我也听说过狮身人面像的好处,特别是与MySQL数据库结合使用。 虽然没有用过它。
国际海事组织,你应该选择:
我已经使用了狮身人面像,Solr和Elasticsearch。 Solr / elasticsearch建立在Lucene之上。 它增加了许多常用功能:Web服务器API,刻面,缓存等。
如果你只想要一个简单的全文搜索设置,狮身人面像是一个更好的选择。
如果你想自定义你的搜索,elasticsearch和solr是更好的选择。 它们非常具有可扩展性:您可以编写自己的插件来调整结果评分。
一些示例用途:
上一篇: ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?
下一篇: Is MongoDB a valid alternative to relational db + lucene?