在 Elasticsearch 中执行相当于 SQL 连接的最佳方法是什么?
我有一个包含两个大表的 SQL 设置:Persons 和 Items。
一个人可以拥有many项目。
人员和项目行都可以更改(即更新)。
我必须运行根据人和物品的各个方面进行过滤的搜索。
在 Elasticsearch 中,看起来您可以将 Person 设为 Item 的嵌套文档,然后使用has_child
.
但是:如果您随后更新一个人,我认为您需要更新他们拥有的每个项目(可能很多)。
那是对的吗?
Elasticsearch 有没有好的方法来解决这个查询?
正如已经提到的,要走的路是父母/孩子。关键是嵌套文档的性能非常好,但为了更新它们,您需要重新提交整个结构(父级+嵌套文档)。尽管嵌套文档的内部实现由单独的 lucene 文档组成,但这些嵌套文档不可见,也不能直接访问。事实上,当使用嵌套文档时,您需要使用适当的查询来访问它们(嵌套查询、嵌套过滤器、嵌套方面等)。
另一方面,父/子允许您拥有相互引用的单独文档,这些文档可以独立更新。它在性能和使用的内存方面有一定的成本,但它比嵌套文档更灵活。
正如中提到的本文 http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/不过,elasticsearch 帮助您管理关系这一事实并不意味着您必须使用这些功能。在许多复杂的用例中,最好在应用程序层上有一些处理关系的自定义逻辑。在方面,父/子也有限制:例如,您永远无法同时返回父和子,这与不允许仅返回匹配的子(目前)的嵌套文档相反。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)