2017-10-13 77 views
0

我是Elastic Search新手,正在嘗試使用度量聚合查詢我的文檔。但是,當我添加字段:min_doc_count = 1我和度量的聚集,我得到一個錯誤: `ElasticSearch:度量聚合支持min_doc_count

{ 
    "error": { 
     "root_cause": [ 
     { 
      "type": "illegal_argument_exception", 
      "reason": "[sum] unknown field [min_doc_count], parser not found" 
     } 
     ], 
     "type": "illegal_argument_exception", 
     "reason": "[sum] unknown field [min_doc_count], parser not found" 
    }, 
    "status": 400 
} 

`

缺少什麼我在這裏?

`

{ 
    "aggregations" : { 
     "myKey" : { 
      "sum" : { 
       "field" : "field1", 
       "min_doc_count": 1 
      } 
     } 
    } 
} 

`

回答

1

我不知道爲什麼/在這裏你有sum關鍵字?

min_doc_count的想法是爲了確保由給定的aggs查詢返回的桶至少包含N個文檔,下面的示例僅返回出現在10個或更多文檔中的主題的主題桶。因此,考慮到這一點

GET _search 
    { 
     "aggs" : { 
      "docs_per_subject" : { 
       "terms" : { 
        "field" : "subject", 
        "min_doc_count": 10 
       } 
      } 
     } 
    } 

,你會重構以下......雖然設置min_doc_count1的時候,它不是真的有必要保持參數的全部。

GET _search 
    { 
     "aggs" : { 
      "docs_per_subject" : { 
       "terms" : { 
        "field" : "field1", 
        "min_doc_count": 1 
       } 
      } 
     } 
    } 
+0

我想我擺脫你的迴應是,min_doc_count對Bucket Aggregation場景更有意義,而不是設置Metric Aggregation。儘管對我來說這是有道理的,但我嘗試這樣做的基本原因是爲NoRecordsHit的Sum Aggregation獲取NULL值,而不是Zero,除非我也查看totalHitsCount,否則它不會告訴我很多。 –

+0

@MilindJindal如果你只想總結'field'的非零值,你可以在查詢部分過濾這些零值。請參閱下面的答案。 – Eli

+0

@greggers:我的實際用例是從彙總查詢中獲取Null值作爲總和,如果我沒有文檔命中。我不想跳過零值。 –

0

如果你想總結領域唯一非零值,你可以在查詢部分過濾那些零值了:

{ 
    "size": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "field": { 
       "gt": 0 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggregations": { 
    "myKey": { 
     "sum": { 
     "field": "field1" 
     } 
    } 
    } 
} 

Bool QueryRange Term