首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用elasticsearch获得与SQL一样的联接功能?

如何使用elasticsearch获得与SQL一样的联接功能?
EN

Stack Overflow用户
提问于 2015-12-27 05:17:42
回答 1查看 4.6K关注 0票数 6

我有一个SQL查询,它连接3-4个表上的操作来获取数据。现在我们转向elasticsearch,以获得更好的性能。如何使用elasticsearch复制相同的联接查询?我读过关于父/子文档的文章,但是我的数据没有任何严格的父/子类型的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-27 05:42:57

Elasticsearch不支持联接,这是NoSQL技术的全部目的。有一些方法可以使用父母/子女关系 (正如您已经注意到的那样)、嵌套对象以及使用特殊的术语查找优化来在数据之间创建一些关系,但这就是其中的一部分。

但是,为了最大限度地利用Elasticsearch,主要思想是尽可能多地去甲基化您的数据,并存储独立的文档。这意味着您可以接受一个单一的文档,它包含它所需的所有信息。您不关心数据将被复制的事实。

例如,假设SQL数据库中有以下JOIN查询,用于检索所有人员及其地址、城市和国家(即4个表):

代码语言:javascript
复制
SELECT p.first_name, p.last_name, 
       a.street_name, a.street_num,
       c.name, c2.name
  FROM person p
  JOIN address a ON a.id = p.addr_id
  JOIN city c ON c.id = p.city_id
  JOIN country c2 ON c2.id = p.country_id

在Elasticsearch中,您将创建一个包含上述查询返回的字段的文档,即

代码语言:javascript
复制
 {
     "first_name": "John",
     "last_name": "Doe",
     "street_num": 34,
     "street_name": "Main Street",
     "city": "San Francisco",
     "country": "United States"
 }

因此,看到这一点的一个方法是,在Elasticsearch中,您将存储在关系数据库中运行查询所得到的相同(或非常相似)字段集。

从RDBMS到Elasticsearch这一步是一个范式的转变。如果您要采取这一步骤,您需要考虑不同的数据。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34477816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档