@@ -45,6 +45,7 @@ module Database.Bloodhound.Types
4545 , mkTermsAggregation
4646 , mkTermsScriptAggregation
4747 , mkDateHistogram
48+ , mkCardinalityAggregation
4849 , mkDocVersion
4950 , docVersionNumber
5051 , toMissing
@@ -310,6 +311,7 @@ module Database.Bloodhound.Types
310311 , MissingAggregation(..)
311312 , ValueCountAggregation(..)
312313 , FilterAggregation(..)
314+ , CardinalityAggregation(..)
313315 , DateHistogramAggregation(..)
314316 , DateRangeAggregation(..)
315317 , DateRangeAggRange(..)
@@ -1694,6 +1696,7 @@ data Interval = Year
16941696 | FractionalInterval Float TimeInterval deriving (Eq, Read, Show, Generic, Typeable)
16951697
16961698data Aggregation = TermsAgg TermsAggregation
1699+ | CardinalityAgg CardinalityAggregation
16971700 | DateHistogramAgg DateHistogramAggregation
16981701 | ValueCountAgg ValueCountAggregation
16991702 | FilterAgg FilterAggregation
@@ -1716,6 +1719,10 @@ data TermsAggregation = TermsAggregation { term :: Either Text Text
17161719 , termAggs :: Maybe Aggregations
17171720 } deriving (Eq, Read, Show, Generic, Typeable)
17181721
1722+data CardinalityAggregation = CardinalityAggregation { cardinalityField :: FieldName,
1723+ precisionThreshold :: Maybe Int
1724+ } deriving (Eq, Read, Show, Generic, Typeable)
1725+
17191726data DateHistogramAggregation = DateHistogramAggregation { dateField :: FieldName
17201727 , dateInterval :: Interval
17211728 , dateFormat :: Maybe Text
@@ -1774,6 +1781,9 @@ mkTermsScriptAggregation t = TermsAggregation (Right t) Nothing Nothing Nothing
17741781mkDateHistogram :: FieldName -> Interval -> DateHistogramAggregation
17751782mkDateHistogram t i = DateHistogramAggregation t i Nothing Nothing Nothing Nothing Nothing Nothing
17761783
1784+mkCardinalityAggregation :: FieldName -> CardinalityAggregation
1785+mkCardinalityAggregation t = CardinalityAggregation t Nothing
1786+
17771787instance ToJSON Version where
17781788 toJSON Version {..} = object ["number" .= number
17791789 ,"build_hash" .= build_hash
@@ -1864,6 +1874,12 @@ instance ToJSON Aggregation where
18641874 where
18651875 toJSON' x = case x of { Left y -> "field" .= y; Right y -> "script" .= y }
18661876
1877+ toJSON (CardinalityAgg (CardinalityAggregation field precisionThreshold)) =
1878+ object ["cardinality" .= omitNulls [ "field" .= field,
1879+ "precisionThreshold" .= precisionThreshold
1880+ ]
1881+ ]
1882+
18671883 toJSON (DateHistogramAgg (DateHistogramAggregation field interval format preZone postZone preOffset postOffset dateHistoAggs)) =
18681884 omitNulls ["date_histogram" .= omitNulls [ "field" .= field,
18691885 "interval" .= interval,