git.iko.soy/typeable/bloodhound
on e84bf70 help sign in
123 lines 5.1 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
3module Test.Query where
5import Test.Common
6import Test.Import
8import qualified Data.HashMap.Strict as HM
10spec :: Spec
11spec =
12 describe "query API" $ do
13 it "returns document for term query and identity filter" $ withTestEnv $ do
14 _ <- insertData
15 let query = TermQuery (Term "user" "bitemyapp") Nothing
16 let filter' = Filter $ MatchAllQuery Nothing
17 let search = mkSearch (Just query) (Just filter')
18 myTweet <- searchTweet search
19 liftIO $
20 myTweet `shouldBe` Right exampleTweet
22 it "handles constant score queries" $ withTestEnv $ do
23 _ <- insertData
24 let query = TermsQuery "user" ("bitemyapp" :| [])
25 let cfQuery = ConstantScoreQuery query (Boost 1.0)
26 let filter' = Filter $ MatchAllQuery Nothing
27 let search = mkSearch (Just cfQuery) (Just filter')
28 myTweet <- searchTweet search
29 liftIO $
30 myTweet `shouldBe` Right exampleTweet
32 it "returns document for terms query and identity filter" $ withTestEnv $ do
33 _ <- insertData
34 let query = TermsQuery "user" ("bitemyapp" :| [])
35 let filter' = Filter $ MatchAllQuery Nothing
36 let search = mkSearch (Just query) (Just filter')
37 myTweet <- searchTweet search
38 liftIO $
39 myTweet `shouldBe` Right exampleTweet
41 it "returns document for match query" $ withTestEnv $ do
42 _ <- insertData
43 let query = QueryMatchQuery $ mkMatchQuery (FieldName "user") (QueryString "bitemyapp")
44 let search = mkSearch (Just query) Nothing
45 myTweet <- searchTweet search
46 liftIO $
47 myTweet `shouldBe` Right exampleTweet
49 it "returns document for multi-match query" $ withTestEnv $ do
50 _ <- insertData
51 let flds = [FieldName "user", FieldName "message"]
52 let query = QueryMultiMatchQuery $ mkMultiMatchQuery flds (QueryString "bitemyapp")
53 let search = mkSearch (Just query) Nothing
54 myTweet <- searchTweet search
55 liftIO $
56 myTweet `shouldBe` Right exampleTweet
58 it "returns document for multi-match query with a custom tiebreaker" $ withTestEnv $ do
59 _ <- insertData
60 let tiebreaker = Just $ Tiebreaker 0.3
61 flds = [FieldName "user", FieldName "message"]
62 multiQuery' = mkMultiMatchQuery flds (QueryString "bitemyapp")
63 query = QueryMultiMatchQuery $ multiQuery' { multiMatchQueryTiebreaker = tiebreaker }
64 search = mkSearch (Just query) Nothing
65 myTweet <- searchTweet search
66 liftIO $
67 myTweet `shouldBe` Right exampleTweet
69 it "returns document for bool query" $ withTestEnv $ do
70 _ <- insertData
71 let innerQuery = QueryMatchQuery $
72 mkMatchQuery (FieldName "user") (QueryString "bitemyapp")
73 let query = QueryBoolQuery $
74 mkBoolQuery [innerQuery] [] [] []
75 let search = mkSearch (Just query) Nothing
76 myTweet <- searchTweet search
77 liftIO $
78 myTweet `shouldBe` Right exampleTweet
80 it "returns document for boosting query" $ withTestEnv $ do
81 _ <- insertData
82 let posQuery = QueryMatchQuery $ mkMatchQuery (FieldName "user") (QueryString "bitemyapp")
83 let negQuery = QueryMatchQuery $ mkMatchQuery (FieldName "user") (QueryString "notmyapp")
84 let query = QueryBoostingQuery $ BoostingQuery posQuery negQuery (Boost 0.2)
85 let search = mkSearch (Just query) Nothing
86 myTweet <- searchTweet search
87 liftIO $
88 myTweet `shouldBe` Right exampleTweet
90 it "returns document for common terms query" $ withTestEnv $ do
91 _ <- insertData
92 let query = QueryCommonTermsQuery $
93 CommonTermsQuery (FieldName "user")
94 (QueryString "bitemyapp")
95 (CutoffFrequency 0.0001)
96 Or Or Nothing Nothing Nothing Nothing
97 let search = mkSearch (Just query) Nothing
98 myTweet <- searchTweet search
99 liftIO $
100 myTweet `shouldBe` Right exampleTweet
102 it "returns document for for inline template query" $ withTestEnv $ do
103 _ <- insertData
104 let innerQuery = QueryMatchQuery $
105 mkMatchQuery (FieldName "{{userKey}}")
106 (QueryString "{{bitemyappKey}}")
107 templateParams = TemplateQueryKeyValuePairs $ HM.fromList
108 [ ("userKey", "user")
109 , ("bitemyappKey", "bitemyapp")
110 ]
111 templateQuery = QueryTemplateQueryInline $
112 TemplateQueryInline innerQuery templateParams
113 search = mkSearch (Just templateQuery) Nothing
114 myTweet <- searchTweet search
115 liftIO $ myTweet `shouldBe` Right exampleTweet
117 it "returns document for wildcard query" $ withTestEnv $ do
118 _ <- insertData
119 let query = QueryWildcardQuery $ WildcardQuery (FieldName "user") "bitemy*" (Nothing)
120 let search = mkSearch (Just query) Nothing
121 myTweet <- searchTweet search
122 liftIO $
123 myTweet `shouldBe` Right exampleTweet