2013-04-04 61 views
2

考慮存儲在ElasticSearch中的事件日誌。事件看起來像這樣在ElasticSearch中合併範圍和直方圖過濾器

{ 
    "timestamp": "2013-04-04T15:38:17Z", 
    "color": "red" 
} 

{ 
    "timestamp": "2013-04-04T17:51:21Z", 
    "color": "green" 
} 

我想繪製每種顏色的頻率時間線。我知道,我可以得到的時間表有兩個疑問是這樣的:

{ 
    "query": { 
    "match": { 
     "color": "red" 
    } 
    }, 
    "size": 0, 
    "facets": { 
    "freq": { 
     "date_histogram": { 
     "interval": "day", 
     "field": "timestamp" 
     } 
    } 
    } 
} 

第二查詢將"match": { "color": "green" }

能否這些查詢合併成一個,足以給我任何

  • 計數(彩色)/天/桶每種顏色
  • 或一個方面,包括直方圖該顏色?

對於兩種顏色,單獨的查詢可以正常工作,但正如您可能會懷疑這是一個檢索示例。我真的處理超過十種顏色,在這一點上,單個查詢將非常好。

回答

4

您可以爲不同的顏色方面結合成使用facet_filter相同的請求:

{ 
    "facets": { 
     "freq_red": { 
      "date_histogram": { 
       "interval": "day", 
       "field": "timestamp" 
      }, 
      "facet_filter": { 
       "term": { 
        "color": "red" 
       } 
      } 
     }, 
     "freq_green": { 
      "date_histogram": { 
       "interval": "day", 
       "field": "timestamp" 
      }, 
      "facet_filter": { 
       "term": { 
        "color": "green" 
       } 
      } 
     } 
    } 
} 
+0

謝謝,我一定是錯過了在該文檔中。有沒有一種方法可以在不知道(或仰視)每種顏色的情況下運行一個方面? – Peter 2013-04-05 08:31:56

+0

@Peter:Sure TermsFacet允許您在不知道術語的情況下按照術語進行刻面。這裏的一個詞將是一種顏色。 http://www.elasticsearch.org/guide/reference/api/search/facets/terms-facet/ – 2013-04-08 08:51:00

+0

是的,術語方面將返回您沒有直方圖的術語列表,以後可以用它來執行所描述的多個直方圖方面查詢以上。但我現在想不出在單個查詢中執行它們的方法。 – imotov 2013-04-08 10:09:48