Elasticsearch:通过关系查询多个索引

The*_*Vic 6 elasticsearch

是否可以跨多个索引查询关系?我知道我可以跨多个索引进行搜索,但随后我会得到两个不相交的结果集。

例如,我有两个索引“客户”和“地址”,它们与客户索引中的地址键相关。我想在一个查询中获取所有住在“纽约”的名为“约翰”的客户。ES 可以“加入”来自地址和客户的两个结果集并给我所有来自纽约的约翰吗?

我得到感觉 ES 不是为那种 rdbms 式的索引连接而设计的。不幸的是,将索引扁平化为一个索引不是一种选择。多次查询也不是一种选择。

Chr*_*ssy 5

ES 是基于文档的 No-SQL,因此您实际上无法在本地进行连接,它不是关系型的:这就是重点。

在像 Elasticsearch 这样的分布式系统中执行完整的 SQL 风格的连接是非常昂贵的。相反,Elasticsearch 提供了两种旨在水平扩展的联接形式。

https://www.elastic.co/guide/en/elasticsearch/reference/current/joining-queries.html

一个有效的解决方案是复制数据,也称为非规范化数据,这可以避免进行连接,但在存储和代码逻辑方面会更重。

从 Elasticsearch 中获得最佳搜索性能的方法是按预期使用它,即在索引时对数据进行非规范化。在需要访问的每个文档中拥有数据的冗余副本,就无需进行联接。

阅读:https ://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html

如果您想要最佳搜索速度,请从现有索引重建非规范化索引。