当前位置: 首页 > 面试题库 >

ElasticSearch用外键映射两个SQL表

米楷
2023-03-14
问题内容

假设我有下表:

`title`
- id
- name
- tv_series_id

Example:
id=1, name="Episode 2", tv_series_id=4

我可以使用以下JSON结构在ElasticSearch中轻松映射它:

{
    "ID": 1,
    "Name": "Episode 2",
    "TVSeriesID": 4
}

如果然后有第二个表称为tv_seriestitle表在外键中引用,例如:

`tv_series`
- id
- name

Example:
id=4, name='Friends'

然后,我将如何在Elasticsearch中映射该关系?是否有一种通用方法可以在Elasticsearch中映射具有一个或多个外键关系的两个表?例如,通过执行特定的join语句?


问题答案:

在SQL世界中,一切都与保持表之间的关系有关,以使数据永远不会重复两次(或尽可能少地重复),因此是主键/外键方法。

通常,在NoSQL世界中,尤其是在Elasticsearch中,索引和类型之间没有明确的关系。有多种方法可以在文档本身之间创建关系(例如,父子对象或嵌套对象),但是没有JOIN的概念。

取而代之的是,主要思想是以一种使文档“可用于”执行特定用例的方式来对数据进行非规范化。人们不应该害怕保留数据的冗余副本。通常,您需要问自己以下两个问题(还有许多其他问题):

  1. 您需要向用户显示哪些数据/字段?
  2. 您需要执行哪些查询来检索以上数据?

在您强调的简单情况下,我肯定会选择一个包含两个表的JOIN的文档:

{
    "ID": 1,
    "Name": "Episode 2",
    "TVSeriesID": 4,
    "TVSeriesName": "Friends"
}

标题Friends将包含在236个文档中没什么大不了的,它的想法是您可以检索任何情节,并且其中包含您需要了解的所有数据。



 类似资料:
  • 问题内容: 我在MySQL中有两个表,其中第一个表称为用户,第二个表称为游戏。表结构如下。 使用者 id(主要) 电子邮件 密码 真正的名字 游戏 id(主要) user_one_id(外国) user_one_score user_two_id(外国) user_two_score 我的游戏桌在两个用户之间建立了两个外交关系。 我的问题是如何为该表结构建立模型关系?-根据laravel文档,我应

  • 但是当我运行应用程序时,我会得到以下异常:

  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!

  • 我试图理解hibernate中两个实体之间的一个映射,同时还有一个条件,即主键(以及外键)必须是复合的。 Hibernate:删除表UserInfo(如果存在) Hibernate:alter table UserInfo add constraint FKlbuhulsmr2lghirdvem61b9lb外键(XYZ_ID,ABC_Num)引用车辆 简而言之,是拥有方实体,并且与实体(以comp

  • 我有两个表:A和B,都有一个复合主键。表B的PK也是表a主键的外键。 当我试图获取映射表B的类的实例时,我得到了以下异常: org.hibernate.TypeMismatchException 这两个类都位于package:com.cairone.ejemple01.entities 完整的日志输出为: 2016-09-21 12:28:24.505错误8568--[main] O.S.Boot

  • 我正在尝试我们非主键作为外键在我的应用程序。场景如下:我有EMPLOYEE和EMPLOYEE_PROPERTIES表。Employee和Employee属性之间存在一对多的关系。下面是我的架构: 下面是我的hibernate映射XML:------------------------------- -------------员工属性------------------- 是否可以引用非主键作为外键