嵌套文档的 Solr 与 Elasticsearch
Solr vs Elasticsearch for nested documents
我的项目一直在使用solr,但最近我遇到了Elasticsearch,这似乎很有前途。我的项目需要处理嵌套文档的能力,我想知道哪一个做得更好。 Solr 最近刚刚添加了子文档,但它和 Elasticsearch 一样好吗? Elasticsearch 可以同时对父子进行查询吗?谢谢
我不知道 Elastic Search,所以这总是 50% 的答案。
Solr 最适合非规范化数据。但是,鉴于你有嵌套文档,你可以在两种场景下使用solr:
- 查询 parent,具有 child 属性
- 查询 parent 的所有 children。
您可以使用块连接来执行上述查询。尽管您处理嵌套级别,但 solr 在内部将它们管理为非规范化。我的意思是,当一个 parent 有 2 个 children 时,您最终会在 solr 中得到三个高级文档。 solr 管理关系部分。
我最近一直在研究这个主题,据我所知,ElasticSearch 使处理嵌套文档时的生活变得更加轻松,尽管 Solr 也支持嵌套(但在查询方面不太灵活)。
所以ElasticSearch的特点是:
"Seamlessly" 支持嵌套:你不必改变你的
嵌套文档结构或添加特定字段。但是,你需要
在映射中指示创建时嵌套的字段
指数
支持 "nested" 和 "path" 的嵌套查询:
支持嵌套文档的聚合和过滤:也通过
"nested" 和 "path".
使用 Solr,您必须:
通过添加 _ 根 _ 字段修改您的 schema.xml
修改您的数据集,使父文档和子文档具有特定的区分字段,特别是 childDocuments 以指示子文档(更多信息请参见 this question)
对嵌套文档的聚合和过滤即使不是不可能,也是非常复杂的。
此外,完全不支持嵌套字段。
最近的 Solr 版本(5.1 及更高版本)最终可以配置为支持嵌套(包括您必须更改输入数据结构),但是文档不是很清楚,并且 Internet 上的信息不多因为这些功能是最近的。
底线是,在嵌套文档的意义上,ElasticSearch 可以做 Solr 可以做的一切,甚至更多,而且更省力,学习曲线更平滑。所以在这种情况下使用 ElasticSearch 似乎更合理。
我的项目一直在使用solr,但最近我遇到了Elasticsearch,这似乎很有前途。我的项目需要处理嵌套文档的能力,我想知道哪一个做得更好。 Solr 最近刚刚添加了子文档,但它和 Elasticsearch 一样好吗? Elasticsearch 可以同时对父子进行查询吗?谢谢
我不知道 Elastic Search,所以这总是 50% 的答案。 Solr 最适合非规范化数据。但是,鉴于你有嵌套文档,你可以在两种场景下使用solr:
- 查询 parent,具有 child 属性
- 查询 parent 的所有 children。
您可以使用块连接来执行上述查询。尽管您处理嵌套级别,但 solr 在内部将它们管理为非规范化。我的意思是,当一个 parent 有 2 个 children 时,您最终会在 solr 中得到三个高级文档。 solr 管理关系部分。
我最近一直在研究这个主题,据我所知,ElasticSearch 使处理嵌套文档时的生活变得更加轻松,尽管 Solr 也支持嵌套(但在查询方面不太灵活)。
所以ElasticSearch的特点是:
"Seamlessly" 支持嵌套:你不必改变你的 嵌套文档结构或添加特定字段。但是,你需要 在映射中指示创建时嵌套的字段 指数
支持 "nested" 和 "path" 的嵌套查询:
支持嵌套文档的聚合和过滤:也通过 "nested" 和 "path".
使用 Solr,您必须:
通过添加 _ 根 _ 字段修改您的 schema.xml
修改您的数据集,使父文档和子文档具有特定的区分字段,特别是 childDocuments 以指示子文档(更多信息请参见 this question)
对嵌套文档的聚合和过滤即使不是不可能,也是非常复杂的。
此外,完全不支持嵌套字段。
最近的 Solr 版本(5.1 及更高版本)最终可以配置为支持嵌套(包括您必须更改输入数据结构),但是文档不是很清楚,并且 Internet 上的信息不多因为这些功能是最近的。
底线是,在嵌套文档的意义上,ElasticSearch 可以做 Solr 可以做的一切,甚至更多,而且更省力,学习曲线更平滑。所以在这种情况下使用 ElasticSearch 似乎更合理。