@@ -1,4 +1,5 @@
1{-# LANGUAGE DeriveGeneric #-}
1{-# LANGUAGE DeriveGeneric #-}
2{-# LANGUAGE RecordWildCards #-}
3{-# LANGUAGE RecordWildCards #-}
4{-| Data types for describing actions and data structures performed to interact
5{-| Data types for describing actions and data structures performed to interact
@@ -175,14 +176,13 @@ module Database.Bloodhound.Types
175 , HighlightTag(..)
176 , HighlightTag(..)
176 , HitHighlight
177 , HitHighlight
178− , TermsResult
179+ , TermsResult(..)
179− , DateHistogramResult
180+ , DateHistogramResult(..)
182import Control.Applicative
183import Control.Applicative
183import Data.Aeson
184import Data.Aeson
184−import Data.Aeson.Types (Pair (..), emptyObject,
185+import Data.Aeson.Types (Pair, emptyObject, parseMaybe)
186import qualified Data.ByteString.Lazy.Char8 as L
186import qualified Data.ByteString.Lazy.Char8 as L
187import Data.List (nub)
187import Data.List (nub)
188import Data.List.NonEmpty (NonEmpty (..))
188import Data.List.NonEmpty (NonEmpty (..))
@@ -1061,7 +1061,7 @@ data ExecutionHint = Ordinals
1061 | GlobalOrdinals
1061 | GlobalOrdinals
1062 | GlobalOrdinalsHash
1062 | GlobalOrdinalsHash
1063 | GlobalOrdinalsLowCardinality
1063 | GlobalOrdinalsLowCardinality
1064− | Map deriving(Eq, Show)
1064+ | Map deriving (Eq, Show)
1066data TimeInterval = Weeks
1066data TimeInterval = Weeks
@@ -1153,7 +1153,7 @@ instance Show TimeInterval where
1153 show Seconds = "s"
1153 show Seconds = "s"
1155instance ToJSON Aggregation where
1155instance ToJSON Aggregation where
1156− toJSON (TermsAgg (TermsAggregation term include exclude order minDocCount size shardSize collectMode executionHint aggs)) =
1156+ toJSON (TermsAgg (TermsAggregation term include exclude order minDocCount size shardSize collectMode executionHint termAggs)) =
1157 omitNulls ["terms" .= omitNulls [ toJSON' term,
1157 omitNulls ["terms" .= omitNulls [ toJSON' term,
1158 "include" .= toJSON include,
1158 "include" .= toJSON include,
1159 "exclude" .= toJSON exclude,
1159 "exclude" .= toJSON exclude,
@@ -1164,11 +1164,11 @@ instance ToJSON Aggregation where
1164 "collect_mode" .= toJSON collectMode,
1164 "collect_mode" .= toJSON collectMode,
1165 "execution_hint" .= toJSON executionHint
1165 "execution_hint" .= toJSON executionHint
1167− "aggs" .= toJSON aggs ]
1167+ "aggs" .= toJSON termAggs ]
1169 toJSON' x = case x of { Left y -> "field" .= toJSON y; Right y -> "script" .= toJSON y }
1169 toJSON' x = case x of { Left y -> "field" .= toJSON y; Right y -> "script" .= toJSON y }
1171− toJSON (DateHistogramAgg (DateHistogramAggregation field interval format preZone postZone preOffset postOffset aggs)) =
1171+ toJSON (DateHistogramAgg (DateHistogramAggregation field interval format preZone postZone preOffset postOffset dateHistoAggs)) =
1172 omitNulls ["date_histogram" .= omitNulls [ "field" .= toJSON field,
1172 omitNulls ["date_histogram" .= omitNulls [ "field" .= toJSON field,
1173 "interval" .= toJSON interval,
1173 "interval" .= toJSON interval,
1174 "format" .= toJSON format,
1174 "format" .= toJSON format,
@@ -1177,7 +1177,7 @@ instance ToJSON Aggregation where
1177 "pre_offset" .= toJSON preOffset,
1177 "pre_offset" .= toJSON preOffset,
1178 "post_offset" .= toJSON postOffset
1178 "post_offset" .= toJSON postOffset
1180− "aggs" .= toJSON aggs ]
1180+ "aggs" .= toJSON dateHistoAggs ]
1182type AggregationResults = M.Map Text Value
1182type AggregationResults = M.Map Text Value
@@ -1226,6 +1226,7 @@ instance FromJSON TermsResult where
1226 v .: "key" <*>
1226 v .: "key" <*>
1227 v .: "doc_count" <*>
1227 v .: "doc_count" <*>
1228 v .:? "aggregations"
1228 v .:? "aggregations"
1229+ parseJSON _ = mempty
1230instance FromJSON DateHistogramResult where
1231instance FromJSON DateHistogramResult where
1231 parseJSON (Object v) = DateHistogramResult <$>
1232 parseJSON (Object v) = DateHistogramResult <$>
@@ -1233,6 +1234,7 @@ instance FromJSON DateHistogramResult where
1233 v .:? "key_as_string" <*>
1234 v .:? "key_as_string" <*>
1234 v .: "doc_count" <*>
1235 v .: "doc_count" <*>
1235 v .:? "aggregations"
1236 v .:? "aggregations"
1237+ parseJSON _ = mempty
1237instance Monoid Filter where
1239instance Monoid Filter where
1238 mempty = IdentityFilter
1240 mempty = IdentityFilter
@@ -1317,11 +1319,11 @@ instance ToJSON Filter where
1317 toJSON (RangeFilter (FieldName fieldName) (Left halfRange) rangeExecution cache) =
1319 toJSON (RangeFilter (FieldName fieldName) (Left halfRange) rangeExecution cache) =
1318 object ["range" .=
1320 object ["range" .=
1319 object [fieldName .=
1321 object [fieldName .=
1320− object [key .= val]
1322+ object [rqFKey .= rqFVal]
1321 , "execution" .= toJSON rangeExecution
1323 , "execution" .= toJSON rangeExecution
1322 , "_cache" .= cache]]
1324 , "_cache" .= cache]]
1324− (key, val) = halfRangeToKV halfRange
1326+ (rqFKey, rqFVal) = halfRangeToKV halfRange
1326 toJSON (RangeFilter (FieldName fieldName) (Right range) rangeExecution cache) =
1328 toJSON (RangeFilter (FieldName fieldName) (Right range) rangeExecution cache) =
1327 object ["range" .=
1329 object ["range" .=
@@ -1535,8 +1537,8 @@ instance ToJSON RangeQuery where
1535 toJSON (RangeQuery (FieldName fieldName) (Left halfRange) boost) =
1537 toJSON (RangeQuery (FieldName fieldName) (Left halfRange) boost) =
1536 object [ fieldName .= conjoined ]
1538 object [ fieldName .= conjoined ]
1537 where conjoined = [ "boost" .= toJSON boost
1539 where conjoined = [ "boost" .= toJSON boost
1538− , key .= val ]
1540+ , rqKey .= rqVal ]
1539− (key, val) = halfRangeToKV halfRange
1541+ (rqKey, rqVal) = halfRangeToKV halfRange
1542instance ToJSON PrefixQuery where
1544instance ToJSON PrefixQuery where
@@ -1827,16 +1829,17 @@ instance (FromJSON a) => FromJSON (EsResult a) where
1829instance ToJSON Search where
1831instance ToJSON Search where
1830− toJSON (Search query sFilter sort aggs highlight sTrackSortScores sFrom sSize) =
1832+ toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize) =
1831 omitNulls [ "query" .= query
1833 omitNulls [ "query" .= query
1832 , "filter" .= sFilter
1834 , "filter" .= sFilter
1833 , "sort" .= sort
1835 , "sort" .= sort
1834− , "aggregations" .= aggs
1836+ , "aggregations" .= searchAggs
1835 , "highlight" .= highlight
1837 , "highlight" .= highlight
1836 , "from" .= sFrom
1838 , "from" .= sFrom
1837 , "size" .= sSize
1839 , "size" .= sSize
1838 , "track_scores" .= sTrackSortScores]
1840 , "track_scores" .= sTrackSortScores]
1840instance ToJSON FieldHighlight where
1843instance ToJSON FieldHighlight where
1841 toJSON (FieldHighlight (FieldName fName) (Just fSettings)) =
1844 toJSON (FieldHighlight (FieldName fName) (Just fSettings)) =
1842 object [ fName .= fSettings ]
1845 object [ fName .= fSettings ]
@@ -1918,7 +1921,6 @@ highlightTagToPairs (Just (CustomTags (pre, post))) = [ "pre_tags" .= pre
1918 , "post_tags" .= post]
1921 , "post_tags" .= post]
1919highlightTagToPairs Nothing = []
1922highlightTagToPairs Nothing = []
1922instance ToJSON SortSpec where
1924instance ToJSON SortSpec where
1923 toJSON (DefaultSortSpec
1925 toJSON (DefaultSortSpec
1924 (DefaultSort (FieldName dsSortFieldName) dsSortOrder dsIgnoreUnmapped
1926 (DefaultSort (FieldName dsSortFieldName) dsSortOrder dsIgnoreUnmapped