2016-02-11 44 views
1

我在彈性搜索中有以下一組嵌套子集(field2是field1的subaggregation,field3是field2的subaggregation)。 然而,事實證明,字段3的術語聚合不會存儲沒有字段3的文檔。如何在elasticsearch中嵌套聚合中填充空和非空字段?

我的理解是我必須使用Missing subaggregation查詢來除了術語query for field3之外的那些查詢。

但我不知道如何將它添加到下面的查詢中以便同時存儲。

{ 
    "size": 0, 
    "aggregations": { 
    "f1": { 
     "terms": { 
     "field": "field1", 
     "size": 0, 
     "order": { 
      "_count": "asc" 
     }, 
     "include": [ 
      "123" 
     ] 
     }, 
     "aggregations": { 
     "field2": { 
      "terms": { 
      "field": "f2", 
      "size": 0, 
      "order": { 
       "_count": "asc" 
      }, 
      "include": [ 
       "tr" 
      ] 
      }, 
      "aggregations": { 
      "field3": { 
       "terms": { 
       "field": "f3", 
       "order": { 
        "_count": "asc" 
       }, 
       "size": 0 
       }, 
       "aggregations": { 
       "aggTopHits": { 
        "top_hits": { 
        "size": 1 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

回答

3

在2.1.2版及更高版本,可以使用missing parameter of the terms aggregation,它允許你指定所缺少的領域文檔的默認值。 (僅供參考,missing參數可用2.0開始,但there was a bug這使它不能工作的子聚合,這是你將如何在這裏使用它。)

 ... 
    "aggregations": { 
     "field3": { 
      "terms": { 
      "field": "f3", 
      "order": { 
       "_count": "asc" 
      }, 
      "size": 0, 
      "missing": "n/a"  <----- provide a default here 
      }, 
      "aggregations": { 
      "aggTopHits": { 
       "top_hits": { 
       "size": 1 
       } 
      } 
      } 
     } 
     } 

但是,如果您使用的是預工作2.X ES集羣,您可以使用missing aggregation在同一深度爲您field3聚集到一桶缺少「F3」像這樣的文件:

 ... 
    "aggregations": { 
     "field3": { 
      "terms": { 
      "field": "f3", 
      "order": { 
       "_count": "asc" 
      }, 
      "size": 0 
      }, 
      "aggregations": { 
      "aggTopHits": { 
       "top_hits": { 
       "size": 1 
       } 
      } 
      } 
     }, 
     "missing_field3": { 
      "missing" : { 
      "field": "f3" 
      }, 
      "aggregations": { 
      "aggTopMissingHit": { 
       "top_hits": { 
       "size": 1 
       } 
      } 
      } 
     } 
     } 
+0

我在2.1.1版本,但不幸的是,新辦法不在內部層面上工作看到這個問題https://github.com/elastic/elasticsearch/issues/14882 – user2175783

+0

好的電話。我正在2.2集羣上進行測試,並按預期工作。我並不知道2.1.1和之前的錯誤。我已經更新了我的答案,以澄清在哪個版本中,「missing」選項有效,幷包含您提供給錯誤詳細信息的鏈接。 – BrookeB

相關問題