我已经看到很多问题(和好的答案)比较了elasticsearch和Solr的可扩展性,速度和部署方案,但我似乎无法找到关于查询如何与之一起工作的任何差异或相对优势的良好信息.索引数据.
具体来说,我对elasticsearch和Solr在以下方面的差异感兴趣:
刻面能力:他们对刻面的处理方式有何不同,或者它们基本相同?
模式处理:似乎elasticsearch具有灵活性优势,因为模式可以通过其余API动态定义,而Solr要求它们在schemas.xml中预先定义(我没有看到这种差异的具体确认,尽管).除了使用模式之外,模式的使用方式是否存在实质性差异?
索引过滤器:如何针对特定搜索优化数据之间存在差异?例如,我已经看到提及像Solr的字段复制和查询标记化过滤器这样的东西,它们增加了搜索算法的可定制性,但是没有看到关于elasticsearch的相同类型的大量信息,但是它可能只是自动处理所有这些东西?
查询表达性:查询DSL基本上是表达彼此,还是存在根本区别?
"提升"和/或结果定制:有哪些设施可用于硬编码或按摩算法搜索结果?
再次请注意,我对速度/可扩展性/性能问题一无所知,只是搜索数据结构和查询语言的表现力 - 可能这整个问题可以概括为:我可以执行搜索或者我可以在elasticsearch中创建的数据结构,我无法在Solr中复制,反之亦然?
分面几乎是相同的,除了ES允许它也通过动态脚本和Solr允许分面分页.同样在Solr中有一个方便的facetting架构来做简单的商店搜索样式分面(注意:它也相对容易使用ES,但不是开箱即用).ES faceting可以更强大,因为不需要将facet绑定到filterquery.
ES架构可以通过API更新!或者在文件中定义它并为类型指定.对于Solr,您可以为每个索引创建一个配置文件.顺便说一句:对于动态字段,您对Solr的模式限制较少.
ES仅错过了自动装配功能(但这与性能相关,因此对您而言并不感兴趣;))和按功能分组.否则两者都使用类似的lucene东西.ES允许在lucene中使用很多高级组合.父子类与功能组相似,并未在Solr IMO中实现.
ES的标准查询是通过JSON制定的,因此您可以创建几乎所有可以通过lucene创建的内容.在Solr你可以做很多高级的东西,但是你经常需要一些关于Solr的基本知识,比如本地的params等等.看看这个很好的讨论.
不明白这个:)
是否可以执行搜索或我可以在elasticsearch中创建的数据结构,我无法在Solr中复制,反之亦然?
在ES中,有一个过滤器功能,使用Solr可能更难实现.在ES中,您还具有实现乐观锁定的版本控制功能,您具有索引别名和扫描查询以深入浏览索引 - 不确定Solr是否具有类似功能.例如,别名有助于实现滚动索引.相对较短.