如何在Elasticsearch中加入 - 或者在Lucene级别加入

Dan*_*ein 8 lucene join bigdata nosql elasticsearch

在Elasticsearch中进行SQL连接的最佳方法是什么?

我有一个带有两个大表的SQL设置:Persons和Items.一个人可以拥有很多物品.Person和Item行都可以更改(即更新).我必须运行根据人物和物品的方面进行过滤的搜索.

在Elasticsearch中,看起来你可以使Person成为Item的嵌套文档,然后使用has_child.

但是:如果你随后更新了一个Person,我认为你需要更新他们拥有的每个项目(这可能很多).

那是对的吗?有没有一种很好的方法可以在Elasticsearch中解决这个问题?

jav*_*nna 14

如前所述,走的路是父母/孩子.关键是嵌套文档非常高效,但为了更新它们,您需要重新提交整个结构(父级+嵌套文档).虽然嵌套文档的内部实现由单独的lucene文档组成,但这些嵌套文档不可见也不可直接访问.实际上,当使用嵌套文档时,您需要使用适当的查询来访问它们(嵌套查询,嵌套过滤器,嵌套构面等).

另一方面,父/子允许您拥有相互引用的单独文档,这些文档可以单独更新.它在性能和使用的内存方面有成本,但它比嵌套文档更灵活.

本文所述,elasticsearch帮助您管理关系并不意味着您必须使用这些功能.在许多复杂的用例中,最好在应用程序层上使用一些处理关系的自定义逻辑.在facet中也有父/子的限制:例如,你永远不能同时回到父和子,而不是嵌套的文件不允许只返回匹配的孩子(现在).