git.iko.soy/typeable/bloodhound
on master help sign in
132 lines 5.5 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 match query with fuzziness" $ withTestEnv $ do
50 _ <- insertData
51 let match = mkMatchQuery (FieldName "user") (QueryString "bidemyapp")
52 let query = QueryMatchQuery $ match { matchQueryFuzziness = Just FuzzinessAuto }
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" $ withTestEnv $ do
59 _ <- insertData
60 let flds = [FieldName "user", FieldName "message"]
61 let query = QueryMultiMatchQuery $ mkMultiMatchQuery flds (QueryString "bitemyapp")
62 let search = mkSearch (Just query) Nothing
63 myTweet <- searchTweet search
64 liftIO $
65 myTweet `shouldBe` Right exampleTweet
67 it "returns document for multi-match query with a custom tiebreaker" $ withTestEnv $ do
68 _ <- insertData
69 let tiebreaker = Just $ Tiebreaker 0.3
70 flds = [FieldName "user", FieldName "message"]
71 multiQuery' = mkMultiMatchQuery flds (QueryString "bitemyapp")
72 query = QueryMultiMatchQuery $ multiQuery' { multiMatchQueryTiebreaker = tiebreaker }
73 search = mkSearch (Just query) Nothing
74 myTweet <- searchTweet search
75 liftIO $
76 myTweet `shouldBe` Right exampleTweet
78 it "returns document for bool query" $ withTestEnv $ do
79 _ <- insertData
80 let innerQuery = QueryMatchQuery $
81 mkMatchQuery (FieldName "user") (QueryString "bitemyapp")
82 let query = QueryBoolQuery $
83 mkBoolQuery [innerQuery] [] [] []
84 let search = mkSearch (Just query) Nothing
85 myTweet <- searchTweet search
86 liftIO $
87 myTweet `shouldBe` Right exampleTweet
89 it "returns document for boosting query" $ withTestEnv $ do
90 _ <- insertData
91 let posQuery = QueryMatchQuery $ mkMatchQuery (FieldName "user") (QueryString "bitemyapp")
92 let negQuery = QueryMatchQuery $ mkMatchQuery (FieldName "user") (QueryString "notmyapp")
93 let query = QueryBoostingQuery $ BoostingQuery posQuery negQuery (Boost 0.2)
94 let search = mkSearch (Just query) Nothing
95 myTweet <- searchTweet search
96 liftIO $
97 myTweet `shouldBe` Right exampleTweet
99 it "returns document for common terms query" $ withTestEnv $ do
100 _ <- insertData
101 let query = QueryCommonTermsQuery $
102 CommonTermsQuery (FieldName "user")
103 (QueryString "bitemyapp")
104 (CutoffFrequency 0.0001)
105 Or Or Nothing Nothing Nothing Nothing
106 let search = mkSearch (Just query) Nothing
107 myTweet <- searchTweet search
108 liftIO $
109 myTweet `shouldBe` Right exampleTweet
111 it "returns document for for inline template query" $ withTestEnv $ do
112 _ <- insertData
113 let innerQuery = QueryMatchQuery $
114 mkMatchQuery (FieldName "{{userKey}}")
115 (QueryString "{{bitemyappKey}}")
116 templateParams = TemplateQueryKeyValuePairs $ HM.fromList
117 [ ("userKey", "user")
118 , ("bitemyappKey", "bitemyapp")
119 ]
120 templateQuery = QueryTemplateQueryInline $
121 TemplateQueryInline innerQuery templateParams
122 search = mkSearch (Just templateQuery) Nothing
123 myTweet <- searchTweet search
124 liftIO $ myTweet `shouldBe` Right exampleTweet
126 it "returns document for wildcard query" $ withTestEnv $ do
127 _ <- insertData
128 let query = QueryWildcardQuery $ WildcardQuery (FieldName "user") "bitemy*" (Nothing)
129 let search = mkSearch (Just query) Nothing
130 myTweet <- searchTweet search
131 liftIO $
132 myTweet `shouldBe` Right exampleTweet