【问题标题】:Elastic Search 6 Nested Query AggregationsElastic Search 6 嵌套查询聚合
【发布时间】:2018-05-13 16:40:11
【问题描述】:

我是弹性搜索查询和聚合的新手。 我有一个包含以下映射的嵌套文档

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

【问题讨论】:

    标签: elasticsearch querydsl


    【解决方案1】:

    您的第一个问题的答案在此链接中nested inner doc countwhich Stats

    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"
              }
            }
          }
        }
      }
    }
    

    Read Nested Agg

    我希望这能满足你的需要。

    【讨论】:

    • 感谢 muammad 的解决方案,只是补充一下,我如何将结果限制在案例 1 到拥有最多员工的部门。在第二种情况下,属于最多部门的员工。
    • 正如您在编辑中建议的那样,您可以在存储桶对象中拥有所有数据。就像你粘贴的一样,约翰在你的结果中属于 3 个部门。
    • 如果是第一个,你会对每个部门产生内部打击,这会告诉你每个部门有多少员工。
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多