2016-08-16 96 views
1

我有一個聚合查詢,根據數值數組字段中的值將我的數據合併到直方圖桶中。該陣列幾乎總是有長度1,但我不能保證它。 在數組的字段上像這樣裝箱時,預期的行爲是什麼。Elasticsearch在聚合數值數組字段時的預期行爲

我明白,如果這個查詢是必須的,我們可能不得不修改模式,但仍然想了解彈性在這裏的表現如何。

實例文檔:

{ 
     "begin": "100", 
     "total": 20, 
     "fractions": [ 10 ] 
    } 

例子查詢:

GET /index-2/_search 
{ 
    "size": 10, 
    "aggs": { 
    "buckets": { 
     "histogram": { 
     "field": "begin", 
     "interval": 1000 
     }, 
     "aggs": { 
     "fractions": { 
      "histogram": { 
      "field": "fractions", 
      "interval": 10 
      } 
     } 
     "totals": { 
      "histogram": { 
      "field": "totals", 
      "interval": 10 
      } 
     } 
     } 
    } 
    } 
} 

我在4至5萬份文檔運行此查詢時,沒有錯誤。以下示例響應代碼片段:

"aggregations": { 
    "buckets": { 
    "buckets": [ 
    { 
     "key": 0, 
     "doc_count": 1235, 
     "fractions": { 
     "buckets": [ 
      { 
      "key": 0, 
      "doc_count": 402 
      }, 
      { 
      "key": 10, 
      "doc_count": 176 
      }, 

      ... 

      { 
      "key": 480, 
      "doc_count": 0 
      }, 
      { 
      "key": 490, 
      "doc_count": 1 
      } 
     ] 
     }, 
     "totals": { 
     "buckets": [ 
      { 
      "key": 0, 
      "doc_count": 271 
      }, 
      { 
      "key": 10, 
      "doc_count": 117 
      }, 

      ... 

      { 
      "key": 550, 
      "doc_count": 0 
      }, 
      { 
      "key": 560, 
      "doc_count": 1 
      } 
     ] 
     } 
    }, 
    ... 
+0

謝謝安德烈。如果我希望我的聚合只考慮數組中的第一個值,那麼可以在不更改模式的情況下進行聚合嗎? – Andrew

+0

我發現我可以使用腳本限制到數組的第一項。而不是 '「field」:「分數」,''你可以使用''script「:」doc ['fractions'] [0]「, – Andrew

回答

0

來自陣列的值將有助於爲該區間創建存儲區。如果與查詢匹配的文檔的fractions值爲10, 50, 90, 100,並且其中一個文檔的[10, 20, 150]fractions,那麼這些值基本上會增加產生桶的「可用」值數組的術語列表。 fractions彙總將覆蓋從10150的所有存儲桶。

例如,像{"begin":100,"total":20,"fractions":[10,35,55]}一個文件中包含"fractions": {"histogram": {"field": "fractions", interval": 5}}聚集將產生像

  "fractions": { 
       "buckets": [ 
       { 
        "key": 10, 
        "doc_count": 1 
       }, 
       { 
        "key": 15, 
        "doc_count": 0 
       }, 
       { 
        "key": 20, 
        "doc_count": 0 
       }, 
       { 
        "key": 25, 
        "doc_count": 0 
       }, 
       { 
        "key": 30, 
        "doc_count": 0 
       }, 
       { 
        "key": 35, 
        "doc_count": 1 
       }, 
       { 
        "key": 40, 
        "doc_count": 0 
       }, 
       { 
        "key": 45, 
        "doc_count": 0 
       }, 
       { 
        "key": 50, 
        "doc_count": 0 
       }, 
       { 
        "key": 55, 
        "doc_count": 1 
       } 
       ] 
      } 

聚集結果基本上,值的列表僅僅是一組附加在聚集集合術語。

相關問題