我一直在为我的项目使用solr,但最近我遇到了Elasticsearch,这看起来非常有前途。我的项目需要能够处理嵌套文档,我想知道哪一个做得更好。 Solr最近刚刚添加了子文档,但它和Elasticsearch一样好吗? Elasticsearch可以同时对父级和子级执行查询吗?感谢
答案 0 :(得分:3)
我最近一直在研究这个主题,根据我的理解,ElasticSearch在处理嵌套文档时会让生活变得更轻松,尽管Solr也支持嵌套(但在查询时不太灵活)。
所以ElasticSearch的功能是:
“无缝”支持嵌套:您无需更改自己的嵌套 嵌套文档结构或添加特定字段。但是,你需要 在映射中指示在创建时嵌套了哪些字段 索引
支持使用“嵌套”和“路径”的嵌套查询:
支持使用嵌套文档进行聚合和过滤:也可以通过 “嵌套”和“路径”。
使用Solr,您将不得不:
通过添加_ root _ field
修改数据集,以便父文档和子文档具有特定的区分字段,特别是 childDocuments 以指示子项(请参阅this question处的更多内容)
嵌套文档的聚合和过滤有望变得非常复杂,如果不是不可能的话。
此外,根本不支持嵌套字段。
最近的Solr版本(5.1及更高版本)最终可以配置为支持嵌套(包括你必须更改输入数据结构),但是,文档不是很清楚,互联网上没有太多信息,因为这些功能是最近的。
底线是,在嵌套文档意义上,ElasticSearch可以完成Solr所能做的一切,甚至可以用更少的努力和更顺畅的学习曲线来完成。因此,在这种情况下,使用ElasticSearch似乎更合理。
答案 1 :(得分:1)
我不知道弹性搜索,所以这总是50%的答案。 Solr最适用于非规范化数据。但是,假设您有嵌套文档,则可以在两种情况下使用solr:
您可以使用块连接来执行上述查询。即使您处理嵌套级别,solr也会在内部将它们作为非规范化进行管理。我的意思是,当父母有2个孩子时,你最终会在solr中找到三个高级文档。 solr管理关系部分。