Elasticsearch:使用关系查询多个索引

时间:2018-03-29 07:42:32

标签: elasticsearch

是否有可能在关系方面跨多个指数进行查询?我知道我可以搜索多个索引,但后来我得到两个不相交的结果集。

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

我觉得Feeling ES并不适用于rdbms风格的Indices加入。不幸的是,将指数扁平化为一个指数并不是一种选择。多次查询也不是一种选择。

非常感谢每一位帮助

1 个答案:

答案 0 :(得分:0)

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

  

在分布式系统中执行完整的SQL样式连接   Elasticsearch非常昂贵。相反,Elasticsearch   提供两种形式的连接,设计用于水平缩放。

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

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

  

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

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

如果您希望获得最佳搜索速度,请从现有索引重建非规范化索引。