【发布时间】:2015-11-01 05:31:01
【问题描述】:
我一直在为我的项目使用 solr,但最近我遇到了 Elasticsearch,它似乎很有前途。我的项目需要处理嵌套文档的能力,我想知道哪一个做得更好。 Solr 最近刚刚添加了子文档,但它和 Elasticsearch 的一样好吗? Elasticsearch 可以同时查询父子节点吗?谢谢
【问题讨论】:
标签: search solr elasticsearch
我一直在为我的项目使用 solr,但最近我遇到了 Elasticsearch,它似乎很有前途。我的项目需要处理嵌套文档的能力,我想知道哪一个做得更好。 Solr 最近刚刚添加了子文档,但它和 Elasticsearch 的一样好吗? Elasticsearch 可以同时查询父子节点吗?谢谢
【问题讨论】:
标签: search solr elasticsearch
我最近一直在研究这个主题,据我了解,ElasticSearch 在处理嵌套文档时让生活变得更轻松,尽管 Solr 也支持嵌套(但在查询方面不太灵活)。
所以ElasticSearch的特点是:
“无缝”支持嵌套:您不必更改您的 嵌套文档结构或添加特定字段。但是,您需要 在映射中指示创建时嵌套了哪些字段 索引
支持带有“nested”和“path”的嵌套查询:
支持使用嵌套文档进行聚合和过滤:也可以通过 “嵌套”和“路径”。
使用 Solr,您必须:
通过添加_root_字段来修改您的schema.xml
修改您的数据集,以便父文档和子文档具有特定的区别字段,特别是 childDocuments 以指示子文档(请参阅this question 的更多信息)
李>嵌套文档的聚合和过滤如果不是不可能的话,肯定会非常复杂。
此外,根本不支持嵌套字段。
最近的 Solr 版本(5.1 及更高版本)最终可以配置为支持嵌套(包括您必须更改输入数据结构),但是,文档不是很清楚,并且 Internet 上没有太多信息,因为这些功能是最近的。
最重要的是,在嵌套文档的意义上,ElasticSearch 可以做 Solr 可以做的所有事情,甚至更多,而且工作量更少,学习曲线更流畅。因此,在这种情况下,使用 ElasticSearch 似乎更合理。
【讨论】:
我不知道 Elastic Search,所以这总是 50% 的答案。 Solr 最适用于非规范化数据。但是,鉴于您有嵌套文档,您可以在两种情况下使用 solr:
您可以使用块连接来执行上述查询。即使您处理嵌套级别,solr 在内部也将它们作为非规范化进行管理。我的意思是,当父母有 2 个孩子时,你最终会在 solr 中得到三个高级文档。 solr 管理关系部分。
【讨论】: