@@ -10,6 +10,7 @@ module Database.Bloodhound.Types
10 , rangeToKV
10 , rangeToKV
11 , showText
11 , showText
12 , unpackId
12 , unpackId
13 , Version(..)
14 , Version(..)
14 , Status(..)
15 , Status(..)
15 , Existence(..)
16 , Existence(..)
@@ -64,6 +65,36 @@ module Database.Bloodhound.Types
64 , Missing(..)
65 , Missing(..)
65 , OpenCloseIndex(..)
66 , OpenCloseIndex(..)
66 , Method(..)
67 , Method(..)
70+ , MultiMatchQuery(..)
73+ , CommonTermsQuery(..)
76+ , FuzzyLikeThisQuery(..)
77+ , FuzzyLikeFieldQuery(..)
82+ , MoreLikeThisQuery(..)
83+ , MoreLikeThisFieldQuery(..)
86+ , QueryStringQuery(..)
87+ , SimpleQueryStringQuery(..)
91+ , BooleanOperator(..)
93+ , CutoffFrequency(..)
69import Data.Aeson
100import Data.Aeson
@@ -82,15 +113,11 @@ data Version = Version { number :: Text
82 , build_snapshot :: Bool
113 , build_snapshot :: Bool
83 , lucene_version :: Text } deriving (Show, Generic)
114 , lucene_version :: Text } deriving (Show, Generic)
85−data (FromJSON a, ToJSON a) => Status a =
86− Status { ok :: Bool
116+data Status a = Status { ok :: Bool
87− , status :: Int
117+ , status :: Int
88− , name :: Text
118+ , name :: Text
89− , version :: a
119+ , version :: a
90− , tagline :: Text } deriving (Eq, Show)
120+ , tagline :: Text } deriving (Eq, Show)
92−newtype ShardCount = ShardCount Int deriving (Eq, Show, Generic)
93−newtype ReplicaCount = ReplicaCount Int deriving (Eq, Show, Generic)
95data IndexSettings =
122data IndexSettings =
96 IndexSettings { indexShards :: ShardCount
123 IndexSettings { indexShards :: ShardCount
@@ -100,7 +127,6 @@ defaultIndexSettings = IndexSettings (ShardCount 3) (ReplicaCount 2)
101data Strategy = RoundRobinStrat | RandomStrat | HeadStrat deriving (Eq, Show)
128data Strategy = RoundRobinStrat | RandomStrat | HeadStrat deriving (Eq, Show)
103−newtype Server = Server String deriving (Eq, Show)
105type Reply = Network.HTTP.Conduit.Response L.ByteString
131type Reply = Network.HTTP.Conduit.Response L.ByteString
106type Method = NHTM.Method
132type Method = NHTM.Method
@@ -120,9 +146,9 @@ data FieldDefinition =
121data MappingField =
147data MappingField =
122 MappingField { mappingFieldName :: FieldName
148 MappingField { mappingFieldName :: FieldName
123− , fieldDefinition :: FieldDefinition } deriving (Eq, Show)
149+ , fieldDefinition :: FieldDefinition } deriving (Eq, Show)
125−data Mapping = Mapping { typeName :: Text
151+data Mapping = Mapping { typeName :: TypeName
126 , fields :: [MappingField] } deriving (Eq, Show)
152 , fields :: [MappingField] } deriving (Eq, Show)
128data BulkOperation =
154data BulkOperation =
@@ -174,28 +200,48 @@ type PrefixValue = Text
175data BooleanOperator = And | Or deriving (Eq, Show)
201data BooleanOperator = And | Or deriving (Eq, Show)
203+newtype ShardCount = ShardCount Int deriving (Eq, Show, Generic)
204+newtype ReplicaCount = ReplicaCount Int deriving (Eq, Show, Generic)
205+newtype Server = Server String deriving (Eq, Show)
177−newtype IndexName = IndexName String deriving (Eq, Generic, Show)
206+newtype IndexName = IndexName String deriving (Eq, Generic, Show)
178−newtype MappingName = MappingName String deriving (Eq, Generic, Show)
207+newtype MappingName = MappingName String deriving (Eq, Generic, Show)
179−newtype DocId = DocId String deriving (Eq, Generic, Show)
208+newtype DocId = DocId String deriving (Eq, Generic, Show)
180−newtype QueryString = QueryString Text deriving (Eq, Show)
209+newtype QueryString = QueryString Text deriving (Eq, Show)
181−newtype FieldName = FieldName Text deriving (Eq, Show)
210+newtype FieldName = FieldName Text deriving (Eq, Show)
182−newtype CacheName = CacheName Text deriving (Eq, Show)
211+newtype CacheName = CacheName Text deriving (Eq, Show)
183−newtype CacheKey = CacheKey Text deriving (Eq, Show)
212+newtype CacheKey = CacheKey Text deriving (Eq, Show)
184−newtype Existence = Existence Bool deriving (Eq, Show)
213+newtype Existence = Existence Bool deriving (Eq, Show)
185−newtype NullValue = NullValue Bool deriving (Eq, Show)
214+newtype NullValue = NullValue Bool deriving (Eq, Show)
186−newtype CutoffFrequency = CutoffFrequency Double deriving (Eq, Show)
215+newtype CutoffFrequency = CutoffFrequency Double deriving (Eq, Show, Generic)
187−newtype Analyzer = Analyzer Text deriving (Eq, Show)
216+newtype Analyzer = Analyzer Text deriving (Eq, Show, Generic)
188−newtype MaxExpansions = MaxExpansions Int deriving (Eq, Show)
217+newtype MaxExpansions = MaxExpansions Int deriving (Eq, Show, Generic)
189−newtype Lenient = Lenient Bool deriving (Eq, Show)
218+newtype Lenient = Lenient Bool deriving (Eq, Show, Generic)
190−newtype Tiebreaker = Tiebreaker Double deriving (Eq, Show)
219+newtype Tiebreaker = Tiebreaker Double deriving (Eq, Show)
191−newtype Boost = Boost Double deriving (Eq, Show)
220+newtype Boost = Boost Double deriving (Eq, Show, Generic)
221+newtype BoostTerms = BoostTerms Double deriving (Eq, Show)
192−newtype MinimumMatch = MinimumMatch Int deriving (Eq, Show)
222+newtype MinimumMatch = MinimumMatch Int deriving (Eq, Show)
193−newtype MinimumMatchText = MinimumMatchText Text deriving (Eq, Show)
223+newtype MinimumMatchText = MinimumMatchText Text deriving (Eq, Show)
224+newtype DisableCoord = DisableCoord Bool deriving (Eq, Show)
225+newtype IgnoreTermFrequency = IgnoreTermFrequency Bool deriving (Eq, Show)
226+newtype MinimumTermFrequency = MinimumTermFrequency Int deriving (Eq, Show)
227+newtype MaxQueryTerms = MaxQueryTerms Int deriving (Eq, Show)
228+newtype Fuzziness = Fuzziness Double deriving (Eq, Show)
229+newtype PrefixLength = PrefixLength Int deriving (Eq, Show)
230+newtype TypeName = TypeName Text deriving (Eq, Show)
231+newtype PercentMatch = PercentMatch Double deriving (Eq, Show)
232+newtype StopWord = StopWord Text deriving (Eq, Show)
233+newtype QueryPath = QueryPath Text deriving (Eq, Show)
234+newtype AllowLeadingWildcard = AllowLeadingWildcard Bool deriving (Eq, Show)
235+newtype LowercaseExpanded = LowercaseExpanded Bool deriving (Eq, Show)
236+newtype EnablePositionIncrements = EnablePositionIncrements Bool deriving (Eq, Show)
237+newtype AnalyzeWildcard = AnalyzeWildcard Bool deriving (Eq, Show)
238+newtype GeneratePhraseQueries = GeneratePhraseQueries Bool deriving (Eq, Show)
194−newtype DisableCoord = DisableCoord Bool deriving (Eq, Show)
239+newtype Locale = Locale Text deriving (Eq, Show)
195−newtype IgnoreTermFrequency = IgnoreTermFrequency Bool deriving (Eq, Show)
240+newtype MaxWordLength = MaxWordLength Int deriving (Eq, Show)
241+newtype MinWordLength = MinWordLength Int deriving (Eq, Show)
196−newtype MaxQueryTerms = MaxQueryTerms Int deriving (Eq, Show)
242+newtype PhraseSlop = PhraseSlop Int deriving (Eq, Show)
197−newtype Fuzziness = Fuzziness Double deriving (Eq, Show)
243+newtype MinDocFrequency = MinDocFrequency Int deriving (Eq, Show)
198−newtype PrefixLength = PrefixLength Int deriving (Eq, Show)
244+newtype MaxDocFrequency = MaxDocFrequency Int deriving (Eq, Show)
200unpackId :: DocId -> String
246unpackId :: DocId -> String
201unpackId (DocId docId) = docId
247unpackId (DocId docId) = docId
@@ -212,21 +258,173 @@ data Search = Search { queryBody :: Maybe Query
212 , from :: From
258 , from :: From
213 , size :: Size } deriving (Eq, Show)
259 , size :: Size } deriving (Eq, Show)
215−data Query = TermQuery Term (Maybe Boost)
261+data Query = TermQuery Term (Maybe Boost)
262+ | TermsQuery [Term] MinimumMatch
216− | QueryMatchQuery MatchQuery
263+ | QueryMatchQuery MatchQuery
217− | QueryMultiMatchQuery MultiMatchQuery
264+ | QueryMultiMatchQuery MultiMatchQuery
218− | QueryBoolQuery BoolQuery
265+ | QueryBoolQuery BoolQuery
219− | QueryBoostingQuery BoostingQuery
266+ | QueryBoostingQuery BoostingQuery
220− | QueryCommonTermsQuery CommonTermsQuery
267+ | QueryCommonTermsQuery CommonTermsQuery
221− | ConstantScoreFilter Filter Boost
268+ | ConstantScoreFilter Filter Boost
222− | ConstantScoreQuery Query Boost
269+ | ConstantScoreQuery Query Boost
223− | QueryDisMaxQuery DisMaxQuery
270+ | QueryDisMaxQuery DisMaxQuery
224− | QueryFilteredQuery FilteredQuery
271+ | QueryFilteredQuery FilteredQuery
225− | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
272+ | QueryFuzzyLikeThisQuery FuzzyLikeThisQuery
226− | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
273+ | QueryFuzzyLikeFieldQuery FuzzyLikeFieldQuery
227− | QueryFuzzyQuery FuzzyQuery
274+ | QueryFuzzyQuery FuzzyQuery
275+ | QueryHasChildQuery HasChildQuery
276+ | QueryHasParentQuery HasParentQuery
277+ | IdsQuery MappingName [DocId]
278+ | QueryIndicesQuery AnIndicesQuery
279+ | MatchAllQuery (Maybe Boost)
280+ | QueryMoreLikeThisQuery MoreLikeThisQuery
281+ | QueryMoreLikeThisFieldQuery MoreLikeThisFieldQuery
282+ | QueryNestedQuery NestedQuery
283+ | QueryPrefixQuery PrefixQuery
284+ | QueryQueryStringQuery QueryStringQuery
285+ | QuerySimpleQueryStringQuery SimpleQueryStringQuery
286+ | QueryRangeQuery RangeQuery
287+ | QueryRegexpQuery RegexpQuery
228 deriving (Eq, Show)
288 deriving (Eq, Show)
290+-- Possible flags are ALL, ANYSTRING, AUTOMATON, COMPLEMENT,
291+-- EMPTY, INTERSECTION, INTERVAL, or NONE. huh?
294+ RegexpQuery { regexpQueryField :: FieldName
295+ , regexpQuery :: Regexp
296+ , regexpQueryFlags :: RegexpFlags
297+ , regexpQueryCacheName :: CacheName
298+ , regexpQueryCache :: Cache
299+ , regexpQueryCacheKey :: CacheKey } deriving (Eq, Show)
302+ RangeQuery { rangeQueryField :: FieldName
303+ , rangeQueryRange :: Either HalfRange Range
304+ , rangeQueryBoost :: Boost } deriving (Eq, Show)
306+data SimpleQueryStringQuery =
307+ SimpleQueryStringQuery { simpleQueryStringQuery :: QueryString
308+ , simpleQueryStringField :: Maybe FieldOrFields
309+ , simpleQueryStringOperator :: Maybe BooleanOperator
310+ , simpleQueryStringAnalyzer :: Maybe Analyzer
311+ , simpleQueryStringFlags :: Maybe [SimpleQueryFlag]
312+ , simpleQueryStringLowercaseExpanded :: Maybe LowercaseExpanded
313+ , simpleQueryStringLocale :: Maybe Locale
314+ } deriving (Eq, Show)
316+data SimpleQueryFlag = SimpleQueryAll
322+ | SimpleQueryPrecedence
324+ | SimpleQueryWhitespace
327+ | SimpleQuerySlop deriving (Eq, Show)
329+-- use_dis_max and tie_breaker when fields are plural?
330+data QueryStringQuery =
331+ QueryStringQuery { queryStringQuery :: QueryString
332+ , queryStringDefaultField :: Maybe FieldOrFields
333+ , queryStringOperator :: Maybe BooleanOperator
334+ , queryStringAnalyzer :: Maybe Analyzer
335+ , queryStringAllowLeadingWildcard :: Maybe AllowLeadingWildcard
336+ , queryStringLowercaseExpanded :: Maybe LowercaseExpanded
337+ , queryStringEnablePositionIncrements :: Maybe EnablePositionIncrements
338+ , queryStringFuzzyMaxExpansions :: Maybe MaxExpansions
339+ , queryStringFuzziness :: Maybe Fuzziness
340+ , queryStringFuzzyPrefixLength :: Maybe PrefixLength
341+ , queryStringPhraseSlop :: Maybe PhraseSlop
342+ , queryStringBoost :: Maybe Boost
343+ , queryStringAnalyzeWildcard :: Maybe AnalyzeWildcard
344+ , queryStringGeneratePhraseQueries :: Maybe GeneratePhraseQueries
345+ , queryStringMinimumShouldMatch :: Maybe MinimumMatch
346+ , queryStringLenient :: Maybe Lenient
347+ , queryStringLocale :: Maybe Locale
348+ } deriving (Eq, Show)
350+data FieldOrFields = FofField FieldName
351+ | FofFields [FieldName] deriving (Eq, Show)
354+ PrefixQuery { prefixQueryField :: FieldName
355+ , prefixQueryPrefixValue :: Text
356+ , prefixQueryBoost :: Maybe Boost } deriving (Eq, Show)
359+ NestedQuery { nestedQueryPath :: QueryPath
360+ , nestedQueryScoreType :: ScoreType
361+ , nestedQuery :: Query } deriving (Eq, Show)
363+data MoreLikeThisFieldQuery =
364+ MoreLikeThisFieldQuery { moreLikeThisFieldText :: Text
365+ , moreLikeThisFieldFields :: FieldName
366+ -- default 0.3 (30%)
367+ , moreLikeThisFieldPercentMatch :: Maybe PercentMatch
368+ , moreLikeThisFieldMinimumTermFreq :: Maybe MinimumTermFrequency
369+ , moreLikeThisFieldMaxQueryTerms :: Maybe MaxQueryTerms
370+ , moreLikeThisFieldStopWords :: Maybe [StopWord]
371+ , moreLikeThisFieldMinDocFrequency :: Maybe MinDocFrequency
372+ , moreLikeThisFieldMaxDocFrequency :: Maybe MaxDocFrequency
373+ , moreLikeThisFieldMinWordLength :: Maybe MinWordLength
374+ , moreLikeThisFieldMaxWordLength :: Maybe MaxWordLength
375+ , moreLikeThisFieldBoostTerms :: Maybe BoostTerms
376+ , moreLikeThisFieldBoost :: Maybe Boost
377+ , moreLikeThisFieldAnalyzer :: Maybe Analyzer
378+ } deriving (Eq, Show)
380+data MoreLikeThisQuery =
381+ MoreLikeThisQuery { moreLikeThisText :: Text
382+ , moreLikeThisFields :: Maybe [FieldName]
383+ -- default 0.3 (30%)
384+ , moreLikeThisPercentMatch :: Maybe PercentMatch
385+ , moreLikeThisMinimumTermFreq :: Maybe MinimumTermFrequency
386+ , moreLikeThisMaxQueryTerms :: Maybe MaxQueryTerms
387+ , moreLikeThisStopWords :: Maybe [StopWord]
388+ , moreLikeThisMinDocFrequency :: Maybe MinDocFrequency
389+ , moreLikeThisMaxDocFrequency :: Maybe MaxDocFrequency
390+ , moreLikeThisMinWordLength :: Maybe MinWordLength
391+ , moreLikeThisMaxWordLength :: Maybe MaxWordLength
392+ , moreLikeThisBoostTerms :: Maybe BoostTerms
393+ , moreLikeThisBoost :: Maybe Boost
394+ , moreLikeThisAnalyzer :: Maybe Analyzer
395+ } deriving (Eq, Show)
397+data AnIndicesQuery = AnIndexQuery IndexQuery
398+ | AnIndicesQuery IndicesQuery deriving (Eq, Show)
402+ IndicesQuery { indicesQueryIndexName :: IndexName
403+ , indicesQuery :: Query
405+ , indicesQueryNoMatch :: Maybe Query } deriving (Eq, Show)
408+ IndexQuery { indexQueryIndexName :: IndexName
409+ , indexQuery :: Query
411+ , indexQueryNoMatch :: Maybe Query } deriving (Eq, Show)
413+data HasParentQuery =
414+ HasParentQuery { hasParentQueryType :: TypeName
415+ , hasParentQuery :: Query
416+ , hasParentQueryScoreType :: Maybe ScoreType } deriving (Eq, Show)
419+ HasChildQuery { hasChildQueryType :: TypeName
420+ , hasChildQuery :: Query
421+ , hasChildQueryScoreType :: Maybe ScoreType } deriving (Eq, Show)
423+data ScoreType = ScoreTypeMax
426+ | ScoreTypeNone deriving (Eq, Show)
230data FuzzyQuery = FuzzyQuery { fuzzyQueryField :: FieldName
428data FuzzyQuery = FuzzyQuery { fuzzyQueryField :: FieldName
231 , fuzzyQueryValue :: Text
429 , fuzzyQueryValue :: Text
232 , fuzzyQueryPrefixLength :: PrefixLength
430 , fuzzyQueryPrefixLength :: PrefixLength
@@ -373,17 +571,7 @@ data RangeExecution = RangeExecutionIndex
373 | RangeExecutionFielddata deriving (Eq, Show)
571 | RangeExecutionFielddata deriving (Eq, Show)
375newtype Regexp = Regexp Text deriving (Eq, Show)
573newtype Regexp = Regexp Text deriving (Eq, Show)
376−data RegexpFlags = RegexpAll
574+newtype RegexpFlags = RegexpFlags Text deriving (Eq, Show)
384− | IntervalIntersection
386− | IntersectionAnyString deriving (Eq, Show)
388halfRangeToKV :: HalfRange -> (Text, Double)
576halfRangeToKV :: HalfRange -> (Text, Double)
389halfRangeToKV (HalfRangeLt (LessThan n)) = ("lt", n)
577halfRangeToKV (HalfRangeLt (LessThan n)) = ("lt", n)