2017-03-16 37 views
0

在我的弹性搜索索引中有以下类型的条目。Aggregations elasticsearch 5

{ 
    "_index": "employees", 
    "_type": "employee", 
    "_id": "10000", 
    "_score": 1.3640093, 
    "_source": { 
    "itms": { 
     "depc": [ 
     "IT", 
     "MGT", 
     "FIN" 
     ], 
     "dep": [ 
     { 
      "depn": "Information Technology", 
      "depc": "IT" 
     }, 
     { 
      "depn": "Management", 
      "depc": "MGT" 
     }, 
     { 
      "depn": "Finance", 
      "depc": "FIN" 
     }, 
     { 
      "depn": "Finance", 
      "depc": "FIN" 
     } 
     ] 
    } 
    } 
} 

现在我的努力得到独特的部门清单,包括部门代码(DEPC)和部门名称(DEPN)。

我正在尝试下面,但它没有给出我期望的结果。

{ 
    "size": 0, 
    "query": {}, 
    "aggs": { 
    "departments": { 
     "terms": { 
     "field": "itms.dep.depc", 
     "size": 10000, 
     "order": { 
      "_term": "asc" 
     } 
     }, 
     "aggs": { 
     "department": { 
      "terms": { 
      "field": "itms.dep.depn", 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
} 

任何建议表示赞赏。

感谢您

+0

是否有可能为DEPC有多个DEPN或反之亦然? – Rahul

+0

这是不可能的 – Rose18

回答

1

从你的总比分查询,它似乎是itms.dep映射类型为对象,而不是nested

Lucene的无内部对象的概念,所以Elasticsearch平展 对象层次成字段名称和值的简单列表。

因此,您的文档已经在内部转化为:

{ 
    "depc" :  ["IT","MGT","FIN"], 
    "dep.depc" : [ "IT","MGT","FIN"], 
    "dep.depn" : [ "Information Technology", "Management", "Finance" ] 
} 

即你已经失去了depcdepn

之间的关系要解决这个问题:

  1. 你需要改变您的对象类型嵌套
  2. 使用nested aggregation

现有总比分查询的结构似乎没什么问题,但你必须把它转换成一个嵌套聚合后的映射更新