SQL IN 相当于弹性中的子查询来获取数据

问题描述 投票:0回答:1

我有一个具有以下层次结构的弹性文档

Department: [{
       Employee: [{
            Projects: []
    }]
  }]

这些文档是项目级别的。

我想要根据我进入部门时该员工正在从事的最新项目列出每个员工的所有项目。

我正在尝试在 Elastic 中执行相当于 SQL In 查询的操作。

Select top 1 from Project where employee_id in (select employee_id from department where department_code='Dept')

我用的是弹性7.17。

java elasticsearch
1个回答
0
投票

您可以结合使用嵌套聚合、过滤器和排序。

{
  "size": 0,
  "query": {
    "nested": {
      "path": "Department.Employee",
      "query": {
        "bool": {
          "must": [
            { "match": { "Department.department_code": "Dept" }}
          ]
        }
      }
    }
  },
  "aggs": {
    "employees": {
      "nested": {
        "path": "Department.Employee"
      },
      "aggs": {
        "latest_project": {
          "top_hits": {
            "size": 1,
            "sort": [{ "Department.Employee.Project.date": { "order": "desc" }}]
          }
        }
      }
    }
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.