Elasticsearch - 模拟外键行为

时间:2015-12-06 15:19:27

标签: elasticsearch

我在Elasticsearch中建模文档时遇到问题,而关系数据库中的外键很容易解决我的问题。 我越接近尝试父子关系,但我的案例有多个父母同一文件(我可能会以错误的方式看待它)

考虑类型为人的以下3个文件:
DOC1:

{
  _id: 10
  "source":{
    "first_name": "child1_first_name",
    "last_name": "child1_last_name",
    "age" : 10,
    "phone": "0505055050",
    .
    .
    "mother":{
      "id": 100
      "firt_name": "mother1",
      "last_name": "last_name1"
    }
  }
}

DOC2:

{
  _id: 11
  "source":{
    "first_name": "child2_first_name",
    "last_name": "child2_last_name",
    "age" : 12,
    "phone": "878787878",
    .
    .
    "mother":{
      "id": 100
      "firt_name": "mother1",
      "last_name": "last_name1"
    }
  }
}

doc3的:

{
  _id: 100
  "source":{
    "first_name": "mother1",
    "last_name": "last_name1",
    "age" : 40,
    "phone": "12212121212",
    .
    .
    "mother":{}
  }
}

我的问题是母亲更新她的姓氏或名字。 我是否需要找到所有文件,即id 100是他们的母亲,并将他们的内部文件更改为正确的名字和姓氏?

这只是一个例子,我的情况是我需要用他们母亲的正确和新名称更新100多个孩子。 在关系数据库中,使用外键可以很容易。

我尝试使用此reference但无法找到解决问题的方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

看起来你在找这个: Elasticsearch中的父文档和子文档 https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html

因此,您首先需要调整mapping,以便mother可以用作父级和类型本身 - >更多关于https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child-mapping.html

然后按https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-parent-child.html

中所述进行索引
PUT /index_name/child/10?parent=100

现在对父文档的更改应该会导致所有子文档发生更改。

Side new:此插件可能对解决方案很有用:http://siren.solutions/relational-joins-for-elasticsearch-the-siren-join-plugin/