ElasticSearch 使用外键映射两个 sql 表

Dav*_*542 4 sql elasticsearch

假设我有下表:

`title`
- id
- name
- tv_series_id

Example:
id=1, name="Episode 2", tv_series_id=4
Run Code Online (Sandbox Code Playgroud)

我可以使用以下 JSON 结构轻松地将其映射到 ElasticSearch 中:

{
    "ID": 1,
    "Name": "Episode 2",
    "TVSeriesID": 4
}
Run Code Online (Sandbox Code Playgroud)

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

`tv_series`
- id
- name

Example:
id=4, name='Friends'
Run Code Online (Sandbox Code Playgroud)

那么我将如何在 Elasticsearch 中映射这种关系?是否有一种通用方法可以在 Elasticsearch 中映射具有一个或多个外键关系的两个表?例如,通过执行某个连接语句?

Val*_*Val 8

在 SQL 世界中,一切都是关于以这样一种方式保持表之间的关系,即数据永远不会重复两次(或尽可能少),因此采用主键/外键方法。

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

相反,主要思想是以这样一种方式非规范化您的数据,即您的文档将“可用于”执行您的特定用例。人们不应该害怕保留数据的冗余副本。更一般地说,您需要问自己以下两个问题(以及许多其他问题):

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

在您突出显示的简单情况下,我肯定会使用包含两个表的 JOIN 的文档:

{
    "ID": 1,
    "Name": "Episode 2",
    "TVSeriesID": 4,
    "TVSeriesName": "Friends"
}
Run Code Online (Sandbox Code Playgroud)

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