首页 > 解决方案 > ElasticSearch 关系查询?

问题描述

我有两个 ES 文档(作为示例):

{
    "id": "person_1",
    "name": "John"
}

{
    "id": "organisation",
    "employeesById": [ "person_1" ]
}

是否可以进行查询以返回所有拥有名为“John”的员工的组织,或者我是否必须对上面的数据结构进行非规范化并执行employeesById.employee.name?

标签: elasticsearch

解决方案


在不了解您的用例的情况下,我建议您尝试非规范化。例如,

{
  "id": "person_1",
  "name": "John",
  "organisation": "organisation_id"
}

如果 (1) 两个文档都存储在同一个索引中,并且 (2) 一个人经常更改组织,那么保持非规范化文档的一致性将更加苛刻(需要检索和更新大量相关文档)。在这种情况下,我建议通过使用 Join 数据类型(指向 Elastic 文档的链接)并使用父连接查询来运行您的搜索(指向 Elastic 文档的链接)来定义关系人员组织。


推荐阅读