@@ -70,6 +70,7 @@ module Database.Bloodhound.Types
71 , EsResult(..)
71 , EsResult(..)
72 , EsResultFound(..)
72 , EsResultFound(..)
73 , DocVersion
74 , DocVersion
74 , ExternalDocVersion(..)
75 , ExternalDocVersion(..)
75 , VersionControl(..)
76 , VersionControl(..)
@@ -493,13 +494,18 @@ data EsResult a = EsResult { _index :: Text
493 , _id :: Text
494 , _id :: Text
494 , foundResult :: Maybe (EsResultFound a)} deriving (Eq, Show)
495 , foundResult :: Maybe (EsResultFound a)} deriving (Eq, Show)
497{-| 'EsResultFound' contains the document and its metadata inside of an
497{-| 'EsResultFound' contains the document and its metadata inside of an
498 'EsResult' when the document was successfully found.
498 'EsResult' when the document was successfully found.
500data EsResultFound a = EsResultFound { _version :: DocVersion
500data EsResultFound a = EsResultFound { _version :: DocVersion
501 , _source :: a } deriving (Eq, Show)
501 , _source :: a } deriving (Eq, Show)
503+{-| 'EsError' is the generic type that will be returned when there was a
504+ problem. If you can't parse the expected response, its a good idea to
507+data EsError = EsError { errorStatus :: Int
508+ , errorMessage :: Text } deriving (Eq, Show)
505{-| 'DocVersion' is an integer version number for a document between 1
511{-| 'DocVersion' is an integer version number for a document between 1
@@ -833,7 +839,7 @@ data SearchType = SearchTypeQueryThenFetch
833 deriving (Eq, Show)
839 deriving (Eq, Show)
835data Source =
841data Source =
836− NoSource
842+ NoSource
837 | SourcePatterns PatternOrPatterns
843 | SourcePatterns PatternOrPatterns
838 | SourceIncludeExclude Include Exclude
844 | SourceIncludeExclude Include Exclude
839 deriving (Show, Eq)
845 deriving (Show, Eq)
@@ -1382,7 +1388,7 @@ data Hit a =
1382 , hitType :: MappingName
1388 , hitType :: MappingName
1383 , hitDocId :: DocId
1389 , hitDocId :: DocId
1384 , hitScore :: Score
1390 , hitScore :: Score
1385− , hitSource :: a
1391+ , hitSource :: Maybe a
1386 , hitHighlight :: Maybe HitHighlight } deriving (Eq, Show)
1392 , hitHighlight :: Maybe HitHighlight } deriving (Eq, Show)
1388data ShardResult =
1394data ShardResult =
@@ -2120,48 +2126,91 @@ instance ToJSON MatchQueryType where
2120instance ToJSON FieldName where
2126instance ToJSON FieldName where
2121 toJSON (FieldName fieldName) = String fieldName
2127 toJSON (FieldName fieldName) = String fieldName
2123−instance ToJSON ReplicaCount
2129+instance ToJSON ReplicaCount where
2130+ toJSON = genericToJSON defaultOptions
2124−instance ToJSON ShardCount
2131+instance ToJSON ShardCount where
2132+ toJSON = genericToJSON defaultOptions
2125−instance ToJSON CutoffFrequency
2133+instance ToJSON CutoffFrequency where
2134+ toJSON = genericToJSON defaultOptions
2126−instance ToJSON Analyzer
2135+instance ToJSON Analyzer where
2136+ toJSON = genericToJSON defaultOptions
2127−instance ToJSON MaxExpansions
2137+instance ToJSON MaxExpansions where
2138+ toJSON = genericToJSON defaultOptions
2128−instance ToJSON Lenient
2139+instance ToJSON Lenient where
2140+ toJSON = genericToJSON defaultOptions
2129−instance ToJSON Boost
2141+instance ToJSON Boost where
2142+ toJSON = genericToJSON defaultOptions
2130−instance ToJSON Version
2143+instance ToJSON Version where
2144+ toJSON = genericToJSON defaultOptions
2131−instance ToJSON Tiebreaker
2145+instance ToJSON Tiebreaker where
2146+ toJSON = genericToJSON defaultOptions
2132−instance ToJSON MinimumMatch
2147+instance ToJSON MinimumMatch where
2148+ toJSON = genericToJSON defaultOptions
2133−instance ToJSON DisableCoord
2149+instance ToJSON DisableCoord where
2150+ toJSON = genericToJSON defaultOptions
2134−instance ToJSON PrefixLength
2151+instance ToJSON PrefixLength where
2152+ toJSON = genericToJSON defaultOptions
2135−instance ToJSON Fuzziness
2153+instance ToJSON Fuzziness where
2154+ toJSON = genericToJSON defaultOptions
2136−instance ToJSON IgnoreTermFrequency
2155+instance ToJSON IgnoreTermFrequency where
2156+ toJSON = genericToJSON defaultOptions
2137−instance ToJSON MaxQueryTerms
2157+instance ToJSON MaxQueryTerms where
2158+ toJSON = genericToJSON defaultOptions
2138−instance ToJSON TypeName
2159+instance ToJSON TypeName where
2160+ toJSON = genericToJSON defaultOptions
2139−instance ToJSON IndexName
2161+instance ToJSON IndexName where
2162+ toJSON = genericToJSON defaultOptions
2140−instance ToJSON TemplateName
2163+instance ToJSON TemplateName where
2164+ toJSON = genericToJSON defaultOptions
2141−instance ToJSON TemplatePattern
2165+instance ToJSON TemplatePattern where
2166+ toJSON = genericToJSON defaultOptions
2142−instance ToJSON BoostTerms
2167+instance ToJSON BoostTerms where
2168+ toJSON = genericToJSON defaultOptions
2143−instance ToJSON MaxWordLength
2169+instance ToJSON MaxWordLength where
2170+ toJSON = genericToJSON defaultOptions
2144−instance ToJSON MinWordLength
2171+instance ToJSON MinWordLength where
2172+ toJSON = genericToJSON defaultOptions
2145−instance ToJSON MaxDocFrequency
2173+instance ToJSON MaxDocFrequency where
2174+ toJSON = genericToJSON defaultOptions
2146−instance ToJSON MinDocFrequency
2175+instance ToJSON MinDocFrequency where
2176+ toJSON = genericToJSON defaultOptions
2147−instance ToJSON PhraseSlop
2177+instance ToJSON PhraseSlop where
2178+ toJSON = genericToJSON defaultOptions
2148−instance ToJSON StopWord
2179+instance ToJSON StopWord where
2180+ toJSON = genericToJSON defaultOptions
2149−instance ToJSON QueryPath
2181+instance ToJSON QueryPath where
2182+ toJSON = genericToJSON defaultOptions
2150−instance ToJSON MinimumTermFrequency
2183+instance ToJSON MinimumTermFrequency where
2184+ toJSON = genericToJSON defaultOptions
2151−instance ToJSON PercentMatch
2185+instance ToJSON PercentMatch where
2186+ toJSON = genericToJSON defaultOptions
2152−instance ToJSON MappingName
2187+instance ToJSON MappingName where
2188+ toJSON = genericToJSON defaultOptions
2153−instance ToJSON DocId
2189+instance ToJSON DocId where
2190+ toJSON = genericToJSON defaultOptions
2154−instance ToJSON QueryString
2191+instance ToJSON QueryString where
2192+ toJSON = genericToJSON defaultOptions
2155−instance ToJSON AllowLeadingWildcard
2193+instance ToJSON AllowLeadingWildcard where
2194+ toJSON = genericToJSON defaultOptions
2156−instance ToJSON LowercaseExpanded
2195+instance ToJSON LowercaseExpanded where
2196+ toJSON = genericToJSON defaultOptions
2157−instance ToJSON AnalyzeWildcard
2197+instance ToJSON AnalyzeWildcard where
2198+ toJSON = genericToJSON defaultOptions
2158−instance ToJSON GeneratePhraseQueries
2199+instance ToJSON GeneratePhraseQueries where
2200+ toJSON = genericToJSON defaultOptions
2159−instance ToJSON Locale
2201+instance ToJSON Locale where
2202+ toJSON = genericToJSON defaultOptions
2160−instance ToJSON EnablePositionIncrements
2203+instance ToJSON EnablePositionIncrements where
2204+ toJSON = genericToJSON defaultOptions
2161−instance FromJSON Version
2206+instance FromJSON Version where
2207+ parseJSON = genericParseJSON defaultOptions
2162−instance FromJSON IndexName
2208+instance FromJSON IndexName where
2209+ parseJSON = genericParseJSON defaultOptions
2163−instance FromJSON MappingName
2210+instance FromJSON MappingName where
2211+ parseJSON = genericParseJSON defaultOptions
2164−instance FromJSON DocId
2212+instance FromJSON DocId where
2213+ parseJSON = genericParseJSON defaultOptions
2167instance FromJSON Status where
2216instance FromJSON Status where
@@ -2280,6 +2329,12 @@ instance (FromJSON a) => FromJSON (EsResultFound a) where
2280 v .: "_source"
2329 v .: "_source"
2281 parseJSON _ = empty
2330 parseJSON _ = empty
2332+instance FromJSON EsError where
2333+ parseJSON (Object v) = EsError <$>
2336+ parseJSON _ = empty
2283instance ToJSON Search where
2338instance ToJSON Search where
2284 toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize _ sFields sSource) =
2339 toJSON (Search query sFilter sort searchAggs highlight sTrackSortScores sFrom sSize _ sFields sSource) =
2285 omitNulls [ "query" .= query
2340 omitNulls [ "query" .= query
@@ -2543,11 +2598,11 @@ instance (FromJSON a) => FromJSON (SearchHits a) where
2544instance (FromJSON a) => FromJSON (Hit a) where
2599instance (FromJSON a) => FromJSON (Hit a) where
2545 parseJSON (Object v) = Hit <$>
2600 parseJSON (Object v) = Hit <$>
2546− v .: "_index" <*>
2601+ v .: "_index" <*>
2547− v .: "_type" <*>
2602+ v .: "_type" <*>
2548− v .: "_id" <*>
2603+ v .: "_id" <*>
2549− v .: "_score" <*>
2604+ v .: "_score" <*>
2550− v .: "_source" <*>
2605+ v .:? "_source" <*>
2551 v .:? "highlight"
2606 v .:? "highlight"
2552 parseJSON _ = empty
2607 parseJSON _ = empty