Solr vs Elasticsearch用于嵌套文档

时间:2015-08-09 02:10:42

标签: search solr elasticsearch

我一直在为我的项目使用solr,但最近我遇到了Elasticsearch,这看起来非常有前途。我的项目需要能够处理嵌套文档,我想知道哪一个做得更好。 Solr最近刚刚添加了子文档,但它和Elasticsearch一样好吗? Elasticsearch可以同时对父级和子级执行查询吗?感谢

2 个答案:

答案 0 :(得分:3)

我最近一直在研究这个主题,根据我的理解,ElasticSearch在处理嵌套文档时会让生活变得更轻松,尽管Solr也支持嵌套(但在查询时不太灵活)。

所以ElasticSearch的功能是:

  • “无缝”支持嵌套:您无需更改自己的嵌套 嵌套文档结构或添加特定字段。但是,你需要 在映射中指示在创建时嵌套了哪些字段 索引

  • 支持使用“嵌套”和“路径”的嵌套查询:

  • 支持使用嵌套文档进行聚合和过滤:也可以通过 “嵌套”和“路径”。

使用Solr,您将不得不:

  • 通过添加_ root _ field

  • 修改schema.xml
  • 修改数据集,以便父文档和子文档具有特定的区分字段,特别是 childDocuments 以指示子项(请参阅this question处的更多内容)

  • 嵌套文档的聚合和过滤有望变得非常复杂,如果不是不可能的话。

此外,根本不支持嵌套字段。

最近的Solr版本(5.1及更高版本)最终可以配置为支持嵌套(包括你必须更改输入数据结构),但是,文档不是很清楚,互联网上没有太多信息,因为这些功能是最近的。

底线是,在嵌套文档意义上,ElasticSearch可以完成Solr所能做的一切,甚至可以用更少的努力和更顺畅的学习曲线来完成。因此,在这种情况下,使用ElasticSearch似乎更合理。

答案 1 :(得分:1)

我不知道弹性搜索,所以这总是50%的答案。 Solr最适用于非规范化数据。但是,假设您有嵌套文档,则可以在两种情况下使用solr:

  1. 使用子属性
  2. 查询父级
  3. 查询父母的所有子女。
  4. 您可以使用块连接来执行上述查询。即使您处理嵌套级别,solr也会在内部将它们作为非规范化进行管理。我的意思是,当父母有2个孩子时,你最终会在solr中找到三个高级文档。 solr管理关系部分。