当前位置:  开发笔记 > 数据库 > 正文

如何使用Elasticsearch以获得SQL中的JOIN功能?

如何解决《如何使用Elasticsearch以获得SQL中的JOIN功能?》经验,为你挑选了1个好方法。

我有一个SQL查询,该查询对3-4个表执行JOIN操作以获取数据。现在,我们正在转向弹性搜索以获得更好的性能。如何使用elasticsearch复制相同的JOIN查询?我已经阅读了有关父/子文档的信息,但是我的数据没有任何严格的父/子类数据。



1> Val..:

Elasticsearch不支持JOIN,这首先是NoSQL技术的全部目的。有多种方法可以使用父/子关系(如您所注意到的),嵌套对象以及特殊术语查找优化来在数据之间创建某些关系,仅此而已。

但是,为了充分利用Elasticsearch,主要思想是尽可能使数据规范化并存储独立的文档。这意味着您可以获取一个文档,其中包含所需的所有信息。您不必担心数据将被复制的事实。

例如,假设您在SQL数据库中具有以下JOIN查询,以检索所有人的地址,城市和国家(即4个表):

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中,您将创建一个文档,其中包含上述查询返回的字段,即

 {
     "first_name": "John",
     "last_name": "Doe",
     "street_num": 34,
     "street_name": "Main Street",
     "city": "San Francisco",
     "country": "United States"
 }

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

从RDBMS迈向Elasticsearch是一个范式转变。如果您打算采取这一步骤,则需要对数据进行不同的思考。

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有