@@ -211,15 +211,15 @@ insertWithSpaceInId = do
211211 _ <- refreshIndex testIndex
212212 return ()
213213
214−searchTweet :: Search -> BH IO (Either String Tweet)
214+searchTweet :: Search -> BH IO (Either EsError Tweet)
215215searchTweet search = do
216216 result <- searchTweets search
217− let myTweet :: Either String Tweet
217+ let myTweet :: Either EsError Tweet
218218 myTweet = grabFirst result
219219 return myTweet
220220
221−searchTweets :: Search -> BH IO (Either String (SearchResult Tweet))
222−searchTweets search = eitherDecode . responseBody <$> searchByIndex testIndex search
221+searchTweets :: Search -> BH IO (Either EsError (SearchResult Tweet))
222+searchTweets search = parseEsResponse =<< searchByIndex testIndex search
223223
224224searchExpectNoResults :: Search -> BH IO ()
225225searchExpectNoResults search = do
@@ -253,19 +253,19 @@ searchTermsAggHint hints = do
253253 forM_ hints $ searchExpectAggs . search
254254 forM_ hints (\x -> searchValidBucketAgg (search x) "users" toTerms)
255255
256−searchTweetHighlight :: Search -> BH IO (Either String (Maybe HitHighlight))
256+searchTweetHighlight :: Search -> BH IO (Either EsError (Maybe HitHighlight))
257257searchTweetHighlight search = do
258258 result <- searchTweets search
259259 let myHighlight = fmap (hitHighlight . head . hits . searchHits) result
260260 return myHighlight
261261
262−searchExpectSource :: Source -> Either String Value -> BH IO ()
262+searchExpectSource :: Source -> Either EsError Value -> BH IO ()
263263searchExpectSource src expected = do
264264 _ <- insertData
265265 let query = QueryMatchQuery $ mkMatchQuery (FieldName "_all") (QueryString "haskell")
266266 let search = (mkSearch (Just query) Nothing) { source = Just src }
267267 reply <- searchAll search
268− let result = eitherDecode (responseBody reply) :: Either String (SearchResult Value)
268+ result <- parseEsResponse reply-- :: Either EsError (SearchResult Value)
269269 let value = grabFirst result
270270 liftIO $
271271 value `shouldBe` expected
@@ -307,11 +307,11 @@ reduceSize f = sized $ \n -> resize (n `div` 2) f
307307getSource :: EsResult a -> Maybe a
308308getSource = fmap _source . foundResult
309309
310−grabFirst :: Either String (SearchResult a) -> Either String a
310+grabFirst :: Either EsError (SearchResult a) -> Either EsError a
311311grabFirst r =
312312 case fmap (hitSource . head . hits . searchHits) r of
313313 (Left e) -> Left e
314− (Right Nothing) -> Left "Source was missing"
314+ (Right Nothing) -> Left (EsError 500 "Source was missing")
315315 (Right (Just x)) -> Right x
316316
317317-------------------------------------------------------------------------------
@@ -611,6 +611,26 @@ main = hspec $ do
611611 liftIO $
612612 myTweet `shouldBe` Right exampleTweet
613613
614+ it "handles constant score queries" $ withTestEnv $ do
615+ _ <- insertData
616+ let query = TermsQuery "user" ("bitemyapp" :| [])
617+ let cfQuery = ConstantScoreQuery query (Boost 1.0)
618+ let filter = IdentityFilter
619+ let search = mkSearch (Just cfQuery) (Just filter)
620+ myTweet <- searchTweet search
621+ liftIO $
622+ myTweet `shouldBe` Right exampleTweet
623+ it "handles constant score filters" $ withTestEnv $ do
624+ _ <- insertData
625+ let query = TermsQuery "user" ("bitemyapp" :| [])
626+ let cfFilter = ConstantScoreFilter IdentityFilter (Boost 1.0)
627+ let boolQuery = mkBoolQuery [query, cfFilter] [] []
628+ let search = mkSearch (Just (QueryBoolQuery boolQuery)) Nothing
629+ myTweet <- searchTweet search
630+ liftIO $
631+ myTweet `shouldBe` Right exampleTweet
632+
633+
614634 it "returns document for terms query and identity filter" $ withTestEnv $ do
615635 _ <- insertData
616636 let query = TermsQuery "user" ("bitemyapp" :| [])
@@ -946,7 +966,7 @@ main = hspec $ do
946966 it "doesn't include source when sources are disabled" $ withTestEnv $ do
947967 searchExpectSource
948968 NoSource
949− (Left "Source was missing")
969+ (Left (EsError 500 "Source was missing"))
950970
951971 it "includes a source" $ withTestEnv $ do
952972 searchExpectSource