6

我已经看到很多比较弹性搜索和 Solr 的可扩展性、速度和部署场景的问题(和好的答案),但我似乎找不到关于查询如何与索引数据。

具体来说,我对 elasticsearch 和 Solr 在以下方面的差异感兴趣:

  1. 刻面能力:它们对刻面的处理有何不同,或者它们基本相同?

  2. 模式处理:似乎elasticsearch具有灵活性优势,因为可以通过其余API动态定义模式,而Solr要求它们在schemas.xml中预先定义(虽然我还没有看到这种差异的具体确认)。除此之外,模式的使用方式是否存在实质性差异?

  3. 索引过滤器:针对特定搜索优化数据的方式之间是否存在差异?例如,我已经看到提到诸如 Solr 的字段重复和查询标记化过滤器之类的东西,它们增加了搜索算法的可定制性,但没有看到太多关于弹性搜索的相同类型的信息,但也许它只是自动处理所有这些东西?

  4. 查询表达能力:查询 DSL 基本上是一样的表达能力,还是有根本的区别?

  5. “提升”和/或结果定制:有哪些工具可用于硬编码或按摩算法搜索结果?

再次请注意,我对速度/可扩展性/性能问题完全不感兴趣,只对搜索数据结构和查询语言的表达能力感兴趣——可能整个问题可以概括为:是否有我可以执行的搜索或我可以在 elasticsearch 中创建但无法在 Solr 中复制的数据结构,反之亦然?

4

1 回答 1

7
  1. faceting 几乎是一样的,除了 ES 也允许通过动态脚本和 Solr 允许 facet 分页。在 Solr 中也有一个方便的构面模式来进行简单的商店搜索样式构面(注意:使用 ES 也相对容易,但不是开箱即用的)。ES 分面可以更强大,因为不需要将分面绑定到过滤器查询。

  2. 对于 ES 模式可以通过 API 更新!或在文件中定义它并为type指定。对于 Solr,您为每个索引创建一个配置文件。顺便说一句:对于动态字段,您对 Solr 的限制较少。

  3. ES 仅遗漏了自动升温功能(但这是与性能相关的,因此对您来说并不有趣;))和按功能分组。否则两者都使用类似的 lucene 东西。ES 允许很多高级组合,就像在 lucene 中一样。Parent child 类似于 group by 功能,并且未在 Solr IMO 中实现。

  4. ES 的标准查询是通过 JSON 制定的,因此您几乎可以创建您可以通过 lucene 创建的所有内容。在 Solr 中,你可以做很多高级的事情,但通常你需要一些 Solr 的基本知识,比如本地参数等。看看这个很好的讨论

  5. 不明白这个:)

是否有我可以执行的搜索或我可以在 elasticsearch 中创建但无法在 Solr 中复制的数据结构,反之亦然?

In ES there is the percolator feature which is probably harder to implement with Solr. In ES you also have the versioning feature to implement optimistic locking, you have index aliasing and a scan query to deeply navigate through your index - not sure if Solr has similar features. E.g. the aliasing helps to make a rolling index implementation. relative short.

于 2011-12-09T20:25:18.437 回答