git.iko.soy/typeable/bloodhound
on master help sign in
fixed hoogling, added RangeQuery, formatting, added some exports
fd1c921Chris Allen
Database/Bloodhound/Client.hs+10−6
@@ -1,6 +1,9 @@
1module Database.Bloodhound.Client
1module Database.Bloodhound.Client
2 ( createIndex
2 ( createIndex
3 , deleteIndex
3 , deleteIndex
4+ , indexExists
5+ , openIndex
6+ , closeIndex
4 , createMapping
7 , createMapping
5 , deleteMapping
8 , deleteMapping
6 , indexDocument
9 , indexDocument
@@ -13,6 +16,10 @@ module Database.Bloodhound.Client
13 , refreshIndex
16 , refreshIndex
14 , mkSearch
17 , mkSearch
15 , bulk
18 , bulk
19+ , pageSearch
20+ , mkShardCount
21+ , mkReplicaCount
22+ , getStatus
16 )
23 )
17 where
24 where
18
25
@@ -47,9 +54,6 @@ mkReplicaCount n
47 | n > 1000 = Nothing -- ...
54 | n > 1000 = Nothing -- ...
48 | otherwise = Just (ReplicaCount n)
55 | otherwise = Just (ReplicaCount n)
49
56
50−responseIsError :: Reply -> Bool
51−responseIsError resp = NHTS.statusCode (responseStatus resp) > 299
52−
53emptyBody :: L.ByteString
57emptyBody :: L.ByteString
54emptyBody = L.pack ""
58emptyBody = L.pack ""
55
59
@@ -176,9 +180,9 @@ mash = foldl' (\b x -> mappend b (lazyByteString x))
176mkMetadataValue :: Text -> String -> String -> String -> Value
180mkMetadataValue :: Text -> String -> String -> String -> Value
177mkMetadataValue operation indexName mappingName docId =
181mkMetadataValue operation indexName mappingName docId =
178 object [operation .=
182 object [operation .=
179− object ["_index" .= indexName
183+ object [ "_index" .= indexName
180− , "_type" .= mappingName
184+ , "_type" .= mappingName
181− , "_id" .= docId]]
185+ , "_id" .= docId]]
182
186
183getStreamChunk :: BulkOperation -> [L.ByteString]
187getStreamChunk :: BulkOperation -> [L.ByteString]
184getStreamChunk (BulkIndex (IndexName indexName)
188getStreamChunk (BulkIndex (IndexName indexName)
Database/Bloodhound/Types.hs+49−40
@@ -16,6 +16,7 @@ module Database.Bloodhound.Types
16 , mkMatchQuery
16 , mkMatchQuery
17 , mkMultiMatchQuery
17 , mkMultiMatchQuery
18 , mkBoolQuery
18 , mkBoolQuery
19+ , mkRangeQuery
19 , Version(..)
20 , Version(..)
20 , Status(..)
21 , Status(..)
21 , Existence(..)
22 , Existence(..)
@@ -122,6 +123,9 @@ module Database.Bloodhound.Types
122 , QueryPath(..)
123 , QueryPath(..)
123 , MinimumTermFrequency(..)
124 , MinimumTermFrequency(..)
124 , PercentMatch(..)
125 , PercentMatch(..)
126+ , FieldDefinition(..)
127+ , MappingField(..)
128+ , Mapping(..)
125 ) where
129 ) where
126
130
127import Data.Aeson
131import Data.Aeson
@@ -361,34 +365,35 @@ data Search = Search { queryBody :: Maybe Query
361 , from :: From
365 , from :: From
362 , size :: Size } deriving (Eq, Show)
366 , size :: Size } deriving (Eq, Show)
363
367
368+data Query =
364−data Query = TermQuery Term (Maybe Boost)
369+ TermQuery Term (Maybe Boost)
365− | TermsQuery [Term] MinimumMatch
370+ | TermsQuery [Term] MinimumMatch
366− | QueryMatchQuery MatchQuery
371+ | QueryMatchQuery MatchQuery
367− | QueryMultiMatchQuery MultiMatchQuery
372+ | QueryMultiMatchQuery MultiMatchQuery
368− | QueryBoolQuery BoolQuery
373+ | QueryBoolQuery BoolQuery
369− | QueryBoostingQuery BoostingQuery
374+ | QueryBoostingQuery BoostingQuery
370− | QueryCommonTermsQuery CommonTermsQuery
375+ | QueryCommonTermsQuery CommonTermsQuery
371− | ConstantScoreFilter Filter Boost
376+ | ConstantScoreFilter Filter Boost
372− | ConstantScoreQuery Query Boost
377+ | ConstantScoreQuery Query Boost
373− | QueryDisMaxQuery DisMaxQuery
378+ | QueryDisMaxQuery DisMaxQuery
374− | QueryFilteredQuery FilteredQuery
379+ | QueryFilteredQuery FilteredQuery
375− | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
380+ | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
376− | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
381+ | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
377− | QueryFuzzyQuery FuzzyQuery
382+ | QueryFuzzyQuery FuzzyQuery
378− | QueryHasChildQuery HasChildQuery
383+ | QueryHasChildQuery HasChildQuery
379− | QueryHasParentQuery HasParentQuery
384+ | QueryHasParentQuery HasParentQuery
380− | IdsQuery MappingName [DocId]
385+ | IdsQuery MappingName [DocId]
381− | QueryIndicesQuery IndicesQuery
386+ | QueryIndicesQuery IndicesQuery
382− | MatchAllQuery (Maybe Boost)
387+ | MatchAllQuery (Maybe Boost)
383− | QueryMoreLikeThisQuery MoreLikeThisQuery
388+ | QueryMoreLikeThisQuery MoreLikeThisQuery
384− | QueryMoreLikeThisFieldQuery MoreLikeThisFieldQuery
389+ | QueryMoreLikeThisFieldQuery MoreLikeThisFieldQuery
385− | QueryNestedQuery NestedQuery
390+ | QueryNestedQuery NestedQuery
386− | QueryPrefixQuery PrefixQuery
391+ | QueryPrefixQuery PrefixQuery
387− | QueryQueryStringQuery QueryStringQuery
392+ | QueryQueryStringQuery QueryStringQuery
388− | QuerySimpleQueryStringQuery SimpleQueryStringQuery
393+ | QuerySimpleQueryStringQuery SimpleQueryStringQuery
389− | QueryRangeQuery RangeQuery
394+ | QueryRangeQuery RangeQuery
390− | QueryRegexpQuery RegexpQuery
395+ | QueryRegexpQuery RegexpQuery
391− deriving (Eq, Show)
396+ deriving (Eq, Show)
392
397
393data RegexpQuery =
398data RegexpQuery =
394 RegexpQuery { regexpQueryField :: FieldName
399 RegexpQuery { regexpQueryField :: FieldName
@@ -403,6 +408,9 @@ data RangeQuery =
403 , rangeQueryRange :: Either HalfRange Range
408 , rangeQueryRange :: Either HalfRange Range
404 , rangeQueryBoost :: Boost } deriving (Eq, Show)
409 , rangeQueryBoost :: Boost } deriving (Eq, Show)
405
410
411+mkRangeQuery :: FieldName -> Either HalfRange Range -> RangeQuery
412+mkRangeQuery f r = RangeQuery f r (Boost 1.0)
413+
406data SimpleQueryStringQuery =
414data SimpleQueryStringQuery =
407 SimpleQueryStringQuery { simpleQueryStringQuery :: QueryString
415 SimpleQueryStringQuery { simpleQueryStringQuery :: QueryString
408 , simpleQueryStringField :: Maybe FieldOrFields
416 , simpleQueryStringField :: Maybe FieldOrFields
@@ -413,18 +421,19 @@ data SimpleQueryStringQuery =
413 , simpleQueryStringLocale :: Maybe Locale
421 , simpleQueryStringLocale :: Maybe Locale
414 } deriving (Eq, Show)
422 } deriving (Eq, Show)
415
423
416−data SimpleQueryFlag = SimpleQueryAll
424+data SimpleQueryFlag =
425+ SimpleQueryAll
417− | SimpleQueryNone
426+ | SimpleQueryNone
418− | SimpleQueryAnd
427+ | SimpleQueryAnd
419− | SimpleQueryOr
428+ | SimpleQueryOr
420− | SimpleQueryPrefix
429+ | SimpleQueryPrefix
421− | SimpleQueryPhrase
430+ | SimpleQueryPhrase
422− | SimpleQueryPrecedence
431+ | SimpleQueryPrecedence
423− | SimpleQueryEscape
432+ | SimpleQueryEscape
424− | SimpleQueryWhitespace
433+ | SimpleQueryWhitespace
425− | SimpleQueryFuzzy
434+ | SimpleQueryFuzzy
426− | SimpleQueryNear
435+ | SimpleQueryNear
427− | SimpleQuerySlop deriving (Eq, Show)
436+ | SimpleQuerySlop deriving (Eq, Show)
428
437
429-- use_dis_max and tie_breaker when fields are plural?
438-- use_dis_max and tie_breaker when fields are plural?
430data QueryStringQuery =
439data QueryStringQuery =
Database/Bloodhound/Types/Instances.hs+15
@@ -196,10 +196,25 @@ instance ToJSON Query where
196 toJSON (QueryPrefixQuery query) =
196 toJSON (QueryPrefixQuery query) =
197 object [ "prefix" .= toJSON query ]
197 object [ "prefix" .= toJSON query ]
198
198
199+ toJSON (QueryRangeQuery query) =
200+ object [ "range" .= toJSON query ]
199
201
200mField :: (ToJSON a, Functor f) => T.Text -> f a -> f (T.Text, Value)
202mField :: (ToJSON a, Functor f) => T.Text -> f a -> f (T.Text, Value)
201mField field = fmap ((field .=) . toJSON)
203mField field = fmap ((field .=) . toJSON)
202
204
205+instance ToJSON RangeQuery where
206+ toJSON (RangeQuery (FieldName fieldName) (Right range) boost) =
207+ object [ fieldName .= conjoined ]
208+ where conjoined = [ "boost" .= toJSON boost
209+ , lessKey .= lessVal
210+ , greaterKey .= greaterVal ]
211+ (lessKey, lessVal, greaterKey, greaterVal) = rangeToKV range
212+
213+ toJSON (RangeQuery (FieldName fieldName) (Left halfRange) boost) =
214+ object [ fieldName .= conjoined ]
215+ where conjoined = [ "boost" .= toJSON boost
216+ , key .= val ]
217+ (key, val) = halfRangeToKV halfRange
203
218
204instance ToJSON PrefixQuery where
219instance ToJSON PrefixQuery where
205 toJSON (PrefixQuery (FieldName fieldName) queryValue boost) =
220 toJSON (PrefixQuery (FieldName fieldName) queryValue boost) =
Makefile+1−1
@@ -22,7 +22,7 @@ reset:
22 cabal sandbox init
22 cabal sandbox init
23
23
24haddock:
24haddock:
25− cabal haddock --hyperlink-source --html-location='http://hackage.haskell.org/package/bloodhound/docs' --contents-location='http://hackage.haskell.org/package/bloodhound'
25+ cabal haddock --hoogle --hyperlink-source --html-location='http://hackage.haskell.org/package/bloodhound/docs' --contents-location='http://hackage.haskell.org/package/bloodhound'
26
26
27# cp -R ./dist/doc/html/bloodhound/ bloodhound-0.1.0.1-docs
27# cp -R ./dist/doc/html/bloodhound/ bloodhound-0.1.0.1-docs
28# tar cvzf --format=ustar -f bloodhound-0.1.0.1-docs.tar.gz bloodhound-0.1.0.1-docs
28# tar cvzf --format=ustar -f bloodhound-0.1.0.1-docs.tar.gz bloodhound-0.1.0.1-docs