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数据库结合使用。 虽然没有用过它。

国际海事组织,你应该选择:

  • 所需的功能 - 例如,你需要一个法语词干吗? Lucene和Solr有一个,我不知道其他人。
  • 熟练使用实现语言 - 如果您不了解Java,请勿触摸Java Lucene。 你可能需要C ++来完成Sphinx的工作。 Lucene也被移植到其他语言中。 如果你想扩展搜索引擎,这是最重要的。
  • 易于实验 - 我相信Solr在这方面是最好的。
  • 与其他软件接口 - Sphinx与MySQL有良好的接口。 Solr支持ruby,XML和JSON接口作为RESTful服务器。 Lucene只允许你通过Java进行编程访问。 Compass和Hibernate Search是Lucene的封装,将它集成到更大的框架中。

  • 我已经使用了狮身人面像,Solr和Elasticsearch。 Solr / elasticsearch建立在Lucene之上。 它增加了许多常用功能:Web服务器API,刻面,缓存等。

    如果你只想要一个简单的全文搜索设置,狮身人面像是一个更好的选择。

    如果你想自定义你的搜索,elasticsearch和solr是更好的选择。 它们非常具有可扩展性:您可以编写自己的插件来调整结果评分。

    一些示例用途:

  • 狮身人面像:craigslist.org
  • Solr:Cnet,Netflix,digg.com
  • Elasticsearch:Foursquare,Github
  • 链接地址: http://www.djcxy.com/p/86381.html

    上一篇: ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?

    下一篇: Is MongoDB a valid alternative to relational db + lucene?