git.iko.soy/typeable/bloodhound
on master help sign in
tests are passing now
5c31e2aChris Allen
Database/Bloodhound/Client.hs+6
@@ -14,6 +14,7 @@ module Database.Bloodhound.Client
14 , searchByIndex
14 , searchByIndex
15 , searchByType
15 , searchByType
16 , refreshIndex
16 , refreshIndex
17+ , mkSearch
17 , IndexSettings(..)
18 , IndexSettings(..)
18 , Server(..)
19 , Server(..)
19 , Reply(..)
20 , Reply(..)
@@ -47,6 +48,9 @@ module Database.Bloodhound.Client
47 , GreaterThanEq(..)
48 , GreaterThanEq(..)
48 , Regexp(..)
49 , Regexp(..)
49 , RegexpFlags(..)
50 , RegexpFlags(..)
51+ , FieldName(..)
52+ , CacheName(..)
53+ , CacheKey(..)
50 )
54 )
51 where
55 where
52
56
@@ -315,6 +319,8 @@ data Search = Search { queryBody :: Maybe Query
315 , from :: Int
319 , from :: Int
316 , size :: Int} deriving (Eq, Show)
320 , size :: Int} deriving (Eq, Show)
317
321
322+mkSearch query filter = Search query filter Nothing False 0 10
323+
318pageSearch :: Int -> Int -> Search -> Search
324pageSearch :: Int -> Int -> Search -> Search
319pageSearch from size search = search { from = from, size = size }
325pageSearch from size search = search { from = from, size = size }
320
326
tests/tests.hs+26−23
@@ -106,58 +106,58 @@ main = hspec $ do
106 _ <- insertData
106 _ <- insertData
107 let queryFilter = BoolFilter (MustMatch (Term "user" "bitemyapp") False)
107 let queryFilter = BoolFilter (MustMatch (Term "user" "bitemyapp") False)
108 <&&> IdentityFilter
108 <&&> IdentityFilter
109− let search = Search Nothing (Just queryFilter)
109+ let search = mkSearch Nothing (Just queryFilter)
110 myTweet <- searchTweet search
110 myTweet <- searchTweet search
111 myTweet `shouldBe` Right exampleTweet
111 myTweet `shouldBe` Right exampleTweet
112
112
113 it "returns document for existential filter" $ do
113 it "returns document for existential filter" $ do
114 _ <- insertData
114 _ <- insertData
115− let search = Search Nothing (Just (ExistsFilter "user"))
115+ let search = mkSearch Nothing (Just (ExistsFilter (FieldName "user")))
116 myTweet <- searchTweet search
116 myTweet <- searchTweet search
117 myTweet `shouldBe` Right exampleTweet
117 myTweet `shouldBe` Right exampleTweet
118
118
119 it "returns document for geo boundingbox filter" $ do
119 it "returns document for geo boundingbox filter" $ do
120 _ <- insertData
120 _ <- insertData
121 let box = GeoBoundingBox (LatLon 40.73 (-74.1)) (LatLon 40.10 (-71.12))
121 let box = GeoBoundingBox (LatLon 40.73 (-74.1)) (LatLon 40.10 (-71.12))
122− let bbConstraint = GeoBoundingBoxConstraint "tweet.location" box False
122+ let bbConstraint = GeoBoundingBoxConstraint (FieldName "tweet.location") box False
123 let geoFilter = GeoBoundingBoxFilter bbConstraint GeoFilterMemory
123 let geoFilter = GeoBoundingBoxFilter bbConstraint GeoFilterMemory
124− let search = Search Nothing (Just geoFilter)
124+ let search = mkSearch Nothing (Just geoFilter)
125 myTweet <- searchTweet search
125 myTweet <- searchTweet search
126 myTweet `shouldBe` Right exampleTweet
126 myTweet `shouldBe` Right exampleTweet
127
127
128 it "doesn't return document for nonsensical boundingbox filter" $ do
128 it "doesn't return document for nonsensical boundingbox filter" $ do
129 _ <- insertData
129 _ <- insertData
130 let box = GeoBoundingBox (LatLon 0.73 (-4.1)) (LatLon 0.10 (-1.12))
130 let box = GeoBoundingBox (LatLon 0.73 (-4.1)) (LatLon 0.10 (-1.12))
131− let bbConstraint = GeoBoundingBoxConstraint "tweet.location" box False
131+ let bbConstraint = GeoBoundingBoxConstraint (FieldName "tweet.location") box False
132 let geoFilter = GeoBoundingBoxFilter bbConstraint GeoFilterMemory
132 let geoFilter = GeoBoundingBoxFilter bbConstraint GeoFilterMemory
133− let search = Search Nothing (Just geoFilter)
133+ let search = mkSearch Nothing (Just geoFilter)
134 searchExpectNoResults search
134 searchExpectNoResults search
135
135
136 it "returns document for geo distance filter" $ do
136 it "returns document for geo distance filter" $ do
137 _ <- insertData
137 _ <- insertData
138− let geoPoint = GeoPoint "tweet.location" (LatLon 40.12 (-71.34))
138+ let geoPoint = GeoPoint (FieldName "tweet.location") (LatLon 40.12 (-71.34))
139 let distance = Distance 10.0 Miles
139 let distance = Distance 10.0 Miles
140 let optimizeBbox = OptimizeGeoFilterType GeoFilterMemory
140 let optimizeBbox = OptimizeGeoFilterType GeoFilterMemory
141 let geoFilter = GeoDistanceFilter geoPoint distance SloppyArc optimizeBbox False
141 let geoFilter = GeoDistanceFilter geoPoint distance SloppyArc optimizeBbox False
142− let search = Search Nothing (Just geoFilter)
142+ let search = mkSearch Nothing (Just geoFilter)
143 myTweet <- searchTweet search
143 myTweet <- searchTweet search
144 myTweet `shouldBe` Right exampleTweet
144 myTweet `shouldBe` Right exampleTweet
145
145
146 it "returns document for geo distance range filter" $ do
146 it "returns document for geo distance range filter" $ do
147 _ <- insertData
147 _ <- insertData
148− let geoPoint = GeoPoint "tweet.location" (LatLon 40.12 (-71.34))
148+ let geoPoint = GeoPoint (FieldName "tweet.location") (LatLon 40.12 (-71.34))
149 let distanceRange = DistanceRange (Distance 0.0 Miles) (Distance 10.0 Miles)
149 let distanceRange = DistanceRange (Distance 0.0 Miles) (Distance 10.0 Miles)
150 let geoFilter = GeoDistanceRangeFilter geoPoint distanceRange
150 let geoFilter = GeoDistanceRangeFilter geoPoint distanceRange
151− let search = Search Nothing (Just geoFilter)
151+ let search = mkSearch Nothing (Just geoFilter)
152 myTweet <- searchTweet search
152 myTweet <- searchTweet search
153 myTweet `shouldBe` Right exampleTweet
153 myTweet `shouldBe` Right exampleTweet
154
154
155 it "doesn't return document for wild geo distance range filter" $ do
155 it "doesn't return document for wild geo distance range filter" $ do
156 _ <- insertData
156 _ <- insertData
157− let geoPoint = GeoPoint "tweet.location" (LatLon 40.12 (-71.34))
157+ let geoPoint = GeoPoint (FieldName "tweet.location") (LatLon 40.12 (-71.34))
158 let distanceRange = DistanceRange (Distance 100.0 Miles) (Distance 1000.0 Miles)
158 let distanceRange = DistanceRange (Distance 100.0 Miles) (Distance 1000.0 Miles)
159 let geoFilter = GeoDistanceRangeFilter geoPoint distanceRange
159 let geoFilter = GeoDistanceRangeFilter geoPoint distanceRange
160− let search = Search Nothing (Just geoFilter)
160+ let search = mkSearch Nothing (Just geoFilter)
161 searchExpectNoResults search
161 searchExpectNoResults search
162
162
163 it "returns document for geo polygon filter" $ do
163 it "returns document for geo polygon filter" $ do
@@ -166,8 +166,8 @@ main = hspec $ do
166 LatLon 40.0 (-72.00),
166 LatLon 40.0 (-72.00),
167 LatLon 41.0 (-70.00),
167 LatLon 41.0 (-70.00),
168 LatLon 41.0 (-72.00)]
168 LatLon 41.0 (-72.00)]
169− let geoFilter = GeoPolygonFilter "tweet.location" points
169+ let geoFilter = GeoPolygonFilter (FieldName "tweet.location") points
170− let search = Search Nothing (Just geoFilter)
170+ let search = mkSearch Nothing (Just geoFilter)
171 myTweet <- searchTweet search
171 myTweet <- searchTweet search
172 myTweet `shouldBe` Right exampleTweet
172 myTweet `shouldBe` Right exampleTweet
173
173
@@ -177,35 +177,38 @@ main = hspec $ do
177 LatLon 40.0 (-71.00),
177 LatLon 40.0 (-71.00),
178 LatLon 41.0 (-70.00),
178 LatLon 41.0 (-70.00),
179 LatLon 41.0 (-71.00)]
179 LatLon 41.0 (-71.00)]
180− let geoFilter = GeoPolygonFilter "tweet.location" points
180+ let geoFilter = GeoPolygonFilter (FieldName "tweet.location") points
181− let search = Search Nothing (Just geoFilter)
181+ let search = mkSearch Nothing (Just geoFilter)
182 searchExpectNoResults search
182 searchExpectNoResults search
183
183
184 it "returns document for ids filter" $ do
184 it "returns document for ids filter" $ do
185 _ <- insertData
185 _ <- insertData
186 let filter = IdsFilter "tweet" ["1"]
186 let filter = IdsFilter "tweet" ["1"]
187− let search = Search Nothing (Just filter)
187+ let search = mkSearch Nothing (Just filter)
188 myTweet <- searchTweet search
188 myTweet <- searchTweet search
189 myTweet `shouldBe` Right exampleTweet
189 myTweet `shouldBe` Right exampleTweet
190
190
191 it "returns document for range filter" $ do
191 it "returns document for range filter" $ do
192 _ <- insertData
192 _ <- insertData
193− let filter = RangeFilter "age"
193+ let filter = RangeFilter (FieldName "age")
194 (Right (RangeLtGt (LessThan 100000.0) (GreaterThan 1000.0)))
194 (Right (RangeLtGt (LessThan 100000.0) (GreaterThan 1000.0)))
195 RangeExecutionIndex False
195 RangeExecutionIndex False
196− let search = Search Nothing (Just filter)
196+ let search = mkSearch Nothing (Just filter)
197 myTweet <- searchTweet search
197 myTweet <- searchTweet search
198 myTweet `shouldBe` Right exampleTweet
198 myTweet `shouldBe` Right exampleTweet
199
199
200 it "returns document for regexp filter" $ do
200 it "returns document for regexp filter" $ do
201 _ <- insertData
201 _ <- insertData
202− let filter = RegexpFilter "user" (Regexp "bite.*app") RegexpAll "test" False "key"
202+ let filter = RegexpFilter (FieldName "user") (Regexp "bite.*app")
203+ RegexpAll (CacheName "test") False (CacheKey "key")
203− let search = Search Nothing (Just filter)
204+ let search = mkSearch Nothing (Just filter)
204 myTweet <- searchTweet search
205 myTweet <- searchTweet search
205 myTweet `shouldBe` Right exampleTweet
206 myTweet `shouldBe` Right exampleTweet
206
207
207 it "doesn't return document for non-matching regexp filter" $ do
208 it "doesn't return document for non-matching regexp filter" $ do
208 _ <- insertData
209 _ <- insertData
209− let filter = RegexpFilter "user" (Regexp "boy") RegexpAll "test" False "key"
210+ let filter = RegexpFilter (FieldName "user")
211+ (Regexp "boy") RegexpAll
212+ (CacheName "test") False (CacheKey "key")
210− let search = Search Nothing (Just filter)
213+ let search = mkSearch Nothing (Just filter)
211 searchExpectNoResults search
214 searchExpectNoResults search