@@ -966,8 +966,7 @@ data TermOrder = TermOrder{ termSortField :: Text
966966 , termSortOrder :: SortOrder } deriving (Eq, Show)
967967
968968data TermInclusion = TermInclusion Text
969− | TermPattern { pattern :: Text
970− , flags :: Text } deriving (Eq, Show)
969+ | TermPattern Text Text deriving (Eq, Show)
971970
972971data CollectionMode = BreadthFirst
973972 | DepthFirst deriving (Eq, Show)
@@ -997,32 +996,35 @@ data Interval = Year
997996 | FractionalInterval { fraction :: Float
998997 , interval :: TimeInterval } deriving (Eq, Show)
999998
1000−data Aggregation = TermsAggregation { term :: Text
1001− , termScript :: Maybe Text
1002− , termInclude :: Maybe TermInclusion
1003− , termExclude :: Maybe TermInclusion
1004− , termOrder :: Maybe TermOrder
1005− , termMinDocCount :: Maybe Int
1006− , termSize :: Maybe Int
1007− , termShardSize :: Maybe Int
1008− , termCollectMode :: Maybe CollectionMode
1009− , termAggs :: Maybe Aggregations
1010− }
1011− | DateHistogramAggregation { dateField :: FieldName
1012− , dateInterval :: Interval
1013− , dateFormat :: Maybe Text
1014− , datePreZone :: Maybe Text
1015− , datePostZone :: Maybe Text
1016− , datePreOffset :: Maybe Text
1017− , datePostOffset :: Maybe Text
1018− , dateAggs :: Maybe Aggregations
1019− } deriving (Eq, Show)
999+data Aggregation = TermsAgg TermsAggregation
1000+ | DateHistogramAgg DateHistogramAggregation deriving (Eq, Show)
1001+
1002+data TermsAggregation = TermsAggregation { term :: Text
1003+ , termScript :: Maybe Text
1004+ , termInclude :: Maybe TermInclusion
1005+ , termExclude :: Maybe TermInclusion
1006+ , termOrder :: Maybe TermOrder
1007+ , termMinDocCount :: Maybe Int
1008+ , termSize :: Maybe Int
1009+ , termShardSize :: Maybe Int
1010+ , termCollectMode :: Maybe CollectionMode
1011+ , termAggs :: Maybe Aggregations
1012+ } deriving (Eq, Show)
1013+data DateHistogramAggregation = DateHistogramAggregation { dateField :: FieldName
1014+ , dateInterval :: Interval
1015+ , dateFormat :: Maybe Text
1016+ , datePreZone :: Maybe Text
1017+ , datePostZone :: Maybe Text
1018+ , datePreOffset :: Maybe Text
1019+ , datePostOffset :: Maybe Text
1020+ , dateAggs :: Maybe Aggregations
1021+ } deriving (Eq, Show)
10201022
10211023mkTermsAggregation :: Text -> Aggregation
1022−mkTermsAggregation t = TermsAggregation t Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
1024+mkTermsAggregation t = TermsAgg $ TermsAggregation t Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
10231025
10241026mkDateHistogram :: FieldName -> Interval -> Aggregation
1025−mkDateHistogram t i = DateHistogramAggregation t i Nothing Nothing Nothing Nothing Nothing Nothing
1027+mkDateHistogram t i = DateHistogramAgg $ DateHistogramAggregation t i Nothing Nothing Nothing Nothing Nothing Nothing
10261028
10271029instance ToJSON TermOrder where
10281030 toJSON (TermOrder termSortField termSortOrder) = object [termSortField .= termSortOrder]
@@ -1030,7 +1032,7 @@ instance ToJSON TermOrder where
10301032instance ToJSON TermInclusion where
10311033 toJSON (TermInclusion x) = toJSON x
10321034 toJSON (TermPattern pattern flags) = omitNulls [ "pattern" .= pattern,
1033− "flags" .= flags]
1035+ "flags" .= flags]
10341036
10351037instance ToJSON CollectionMode where
10361038 toJSON BreadthFirst = "breadth_first"
@@ -1064,7 +1066,7 @@ instance Show TimeInterval where
10641066 show Seconds = "s"
10651067
10661068instance ToJSON Aggregation where
1067− toJSON (TermsAggregation term termScript termInclude termExclude termOrder termMinDocCount termSize termShardSize termCollectMode termAggs) =
1069+ toJSON (TermsAgg (TermsAggregation term termScript termInclude termExclude termOrder termMinDocCount termSize termShardSize termCollectMode termAggs)) =
10681070 omitNulls ["terms" .= (omitNulls [ "field" .= (toJSON $ term) ,
10691071 "script" .= (toJSON termScript),
10701072 "include" .= (toJSON termInclude),
@@ -1077,7 +1079,7 @@ instance ToJSON Aggregation where
10771079 ]),
10781080 "aggs" .= (toJSON termAggs) ]
10791081
1080− toJSON (DateHistogramAggregation dateField dateInterval dateFormat datePreZone datePostZone datePreOffset datePostOffset dateAggs) =
1082+ toJSON (DateHistogramAgg (DateHistogramAggregation dateField dateInterval dateFormat datePreZone datePostZone datePreOffset datePostOffset dateAggs)) =
10811083 omitNulls ["date_histogram" .= (omitNulls [ "field" .= (toJSON dateField),
10821084 "interval" .= (toJSON dateInterval),
10831085 "format" .= (toJSON dateFormat),
@@ -1103,7 +1105,7 @@ data TermsResult = TermsResult { termKey :: Text
11031105 , termsAggs :: Maybe AggregationResults } deriving (Show)
11041106
11051107data DateHistogramResult = DateHistogramResult { dateKey :: Int
1106− , dateKeyStr :: Text
1108+ , dateKeyStr :: Maybe Text
11071109 , dateDocCount :: Int
11081110 , dateHistogramAggs :: Maybe AggregationResults } deriving (Show)
11091111
@@ -1121,7 +1123,7 @@ instance BucketAggregation TermsResult where
11211123 aggs = termsAggs
11221124
11231125instance BucketAggregation DateHistogramResult where
1124− key = dateKeyStr
1126+ key = showText . dateKey
11251127 docCount = dateDocCount
11261128 aggs = dateHistogramAggs
11271129
@@ -1139,7 +1141,7 @@ instance FromJSON TermsResult where
11391141instance FromJSON DateHistogramResult where
11401142 parseJSON (Object v) = DateHistogramResult <$>
11411143 v .: "key" <*>
1142− v .: "key_as_string" <*>
1144+ v .:? "key_as_string" <*>
11431145 v .: "doc_count" <*>
11441146 v .:? "aggregations"
11451147