弹性搜索6嵌套查询聚合

3

我是 Elastic Search 查询和聚合的新手。我的嵌套文档具有以下映射。

PUT /company
{
 "mappings": {
 `"data": {
  "properties": {
    "deptId": {
      "type": "keyword"
    },
     "deptName": {
      "type": "keyword"
    },
    "employee": {
      "type": "nested",
      "properties": {
        "empId": {
          "type": "keyword"
        },
        "empName": {
          "type": "text"
        },
        "salary": {
          "type": "float"
        }
       }}}}}}

我已经插入了以下示例数据。
PUT company/data/1
{
"deptId":"1",
"deptName":"HR",
 "employee": [
  {
    "empId": "1",
    "empName": "John",
    "salary":"1000"
  },
   {
    "empId": "2",
    "empName": "Will",
    "salary":"2000"
  }
 ]}

PUT company/data/3
{
  "deptId":"3",
  "deptName":"FINANCE",
   "employee": [
      {
        "empId": "1",
        "empName": "John",
        "salary":"1000"
      },
       {
        "empId": "2",
        "empName": "Will",
        "salary":"2000"
      },
       {
        "empId": "3",
        "empName": "Mark",
        "salary":"4000"
      }]
     }

我该如何为以下内容构建一个查询DSL:
  1. 拥有最多员工的部门
  2. 在大部分部门中出现的员工
我正在使用Elastic Search 6.2.4。
1个回答

1

你的第一个问题的答案在这个链接中 嵌套内部文档计数 哪些统计数据

POST test/_search
{
  "query": {
    "nested": {
      "path": "employee",
      "inner_hits": {} 
    }
  }
}

这回答了你的第二个问题,还有阅读附加链接。
GET /my_index/blogpost/_search
{
  "size" : 0,
  "aggs": {
    "employee": { 
      "nested": {
        "path": "employee"
      },
      "aggs": {
        "by_name": {
          "terms": { 
            "field":    "employee.empName"
          }
        }
      }
    }
  }
}

阅读嵌套聚合

我希望这能给你所需的东西。


谢谢muhammad提供的解决方案,只是想补充一下,在第一种情况下如何限制结果仅为拥有最多员工的部门。在第二种情况下,如何确定属于最多部门的员工。 - onlinejava
正如您在编辑中建议的那样,您可以将所有数据放入存储桶对象中。 就像您粘贴的那样,John在您的结果中属于3个部门。 - Muhammad Zubair Saleem
你将拥有针对每个部门的内部命中,告诉你每个部门有多少员工。 - Muhammad Zubair Saleem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接