问题描述
假设我们有一个弹性索引,我们想要获取该索引的所有文档和一个计算字段,其结果是过滤不同的弹性索引。
我会在 sql 代码中更好地解释这一点,因此即使 Elastic 是 Nosql,我也可以分享目标:
select id,name,(id IN (select customer_id from invoices where customer_id = 123)) as hasBought
from customers;
解决方法
Elasticsearch 不支持表连接。您需要以一种或另一种方式对数据进行非规范化,即使它会导致数据重复。这就是像 ES 一样的 NoSQL 的“缺点”。
引用 docs:
在像 Elasticsearch 这样的分布式系统中执行完整的 SQL 风格的连接是非常昂贵的。相反,Elasticsearch 提供了两种形式的连接,旨在水平扩展。