@@ -17,6 +17,7 @@ module Database.Bloodhound.Types
17 , mkMultiMatchQuery
17 , mkMultiMatchQuery
18 , mkBoolQuery
18 , mkBoolQuery
19 , mkRangeQuery
19 , mkRangeQuery
20 , Version(..)
21 , Version(..)
21 , Status(..)
22 , Status(..)
22 , Existence(..)
23 , Existence(..)
@@ -126,6 +127,12 @@ module Database.Bloodhound.Types
126 , FieldDefinition(..)
127 , FieldDefinition(..)
127 , MappingField(..)
128 , MappingField(..)
128 , Mapping(..)
129 , Mapping(..)
130+ , AllowLeadingWildcard(..)
131+ , LowercaseExpanded(..)
132+ , GeneratePhraseQueries(..)
134+ , AnalyzeWildcard(..)
135+ , EnablePositionIncrements(..)
131import Data.Aeson
138import Data.Aeson
@@ -307,24 +314,30 @@ newtype MappingName = MappingName String deriving (Eq, Generic, Sho
307 at specific documents. -}
314 at specific documents. -}
308newtype DocId = DocId String deriving (Eq, Generic, Show)
315newtype DocId = DocId String deriving (Eq, Generic, Show)
309{-| 'QueryString' is used to wrap query text bodies, be they human written or not. -}
316{-| 'QueryString' is used to wrap query text bodies, be they human written or not. -}
310−newtype QueryString = QueryString Text deriving (Eq, Show)
317+newtype QueryString = QueryString Text deriving (Eq, Generic, Show)
311−{-| 'FieldName' is used all over the place wherever a specific field within a document
318+{-| 'FieldName' is used all over the place wherever a specific field within
312− needs to be specified, usually in 'Query's or 'Filter's. -}
319+ a document needs to be specified, usually in 'Query's or 'Filter's. -}
313newtype FieldName = FieldName Text deriving (Eq, Show)
320newtype FieldName = FieldName Text deriving (Eq, Show)
314{-| 'CacheName' is used in 'RegexpQuery' and 'RegexpFilter' for describing the
321{-| 'CacheName' is used in 'RegexpQuery' and 'RegexpFilter' for describing the
315 'CacheKey' keyed caching behavior. -}
322 'CacheKey' keyed caching behavior. -}
316newtype CacheName = CacheName Text deriving (Eq, Show)
323newtype CacheName = CacheName Text deriving (Eq, Show)
317−{-| 'CacheKey' is used in 'RegexpQuery' and 'RegexpFilter' to key regex caching behavior. -}
324+{-| 'CacheKey' is used in 'RegexpQuery' and 'RegexpFilter' to key regex
325+ caching behavior. -}
318newtype CacheKey = CacheKey Text deriving (Eq, Show)
326newtype CacheKey = CacheKey Text deriving (Eq, Show)
319newtype Existence = Existence Bool deriving (Eq, Show)
327newtype Existence = Existence Bool deriving (Eq, Show)
320newtype NullValue = NullValue Bool deriving (Eq, Show)
328newtype NullValue = NullValue Bool deriving (Eq, Show)
321newtype CutoffFrequency = CutoffFrequency Double deriving (Eq, Show, Generic)
329newtype CutoffFrequency = CutoffFrequency Double deriving (Eq, Show, Generic)
322newtype Analyzer = Analyzer Text deriving (Eq, Show, Generic)
330newtype Analyzer = Analyzer Text deriving (Eq, Show, Generic)
323newtype MaxExpansions = MaxExpansions Int deriving (Eq, Show, Generic)
331newtype MaxExpansions = MaxExpansions Int deriving (Eq, Show, Generic)
332+{-| 'Lenient', if set to true, will cause format based failures to be
333+ ignored. I don't know what the bloody default is, Elasticsearch
334+ documentation didn't say what it was. Let me know if you figure it out. -}
324newtype Lenient = Lenient Bool deriving (Eq, Show, Generic)
335newtype Lenient = Lenient Bool deriving (Eq, Show, Generic)
325newtype Tiebreaker = Tiebreaker Double deriving (Eq, Show, Generic)
336newtype Tiebreaker = Tiebreaker Double deriving (Eq, Show, Generic)
326newtype Boost = Boost Double deriving (Eq, Show, Generic)
337newtype Boost = Boost Double deriving (Eq, Show, Generic)
327newtype BoostTerms = BoostTerms Double deriving (Eq, Show, Generic)
338newtype BoostTerms = BoostTerms Double deriving (Eq, Show, Generic)
339+{-| 'MinimumMatch' controls how many should clauses in the bool query should match.
340+ Can be an absolute value (2) or a percentage (30%) or a combination of both. -}
328newtype MinimumMatch = MinimumMatch Int deriving (Eq, Show, Generic)
341newtype MinimumMatch = MinimumMatch Int deriving (Eq, Show, Generic)
329newtype MinimumMatchText = MinimumMatchText Text deriving (Eq, Show)
342newtype MinimumMatchText = MinimumMatchText Text deriving (Eq, Show)
330newtype DisableCoord = DisableCoord Bool deriving (Eq, Show, Generic)
343newtype DisableCoord = DisableCoord Bool deriving (Eq, Show, Generic)
@@ -332,19 +345,27 @@ newtype IgnoreTermFrequency = IgnoreTermFrequency Bool deriving (Eq, Show,
332newtype MinimumTermFrequency = MinimumTermFrequency Int deriving (Eq, Show, Generic)
345newtype MinimumTermFrequency = MinimumTermFrequency Int deriving (Eq, Show, Generic)
333newtype MaxQueryTerms = MaxQueryTerms Int deriving (Eq, Show, Generic)
346newtype MaxQueryTerms = MaxQueryTerms Int deriving (Eq, Show, Generic)
334newtype Fuzziness = Fuzziness Double deriving (Eq, Show, Generic)
347newtype Fuzziness = Fuzziness Double deriving (Eq, Show, Generic)
348+{-| 'PrefixLength' is the prefix length used in queries, defaults to 0. -}
335newtype PrefixLength = PrefixLength Int deriving (Eq, Show, Generic)
349newtype PrefixLength = PrefixLength Int deriving (Eq, Show, Generic)
336newtype TypeName = TypeName Text deriving (Eq, Show, Generic)
350newtype TypeName = TypeName Text deriving (Eq, Show, Generic)
337newtype PercentMatch = PercentMatch Double deriving (Eq, Show, Generic)
351newtype PercentMatch = PercentMatch Double deriving (Eq, Show, Generic)
338newtype StopWord = StopWord Text deriving (Eq, Show, Generic)
352newtype StopWord = StopWord Text deriving (Eq, Show, Generic)
339newtype QueryPath = QueryPath Text deriving (Eq, Show, Generic)
353newtype QueryPath = QueryPath Text deriving (Eq, Show, Generic)
354+{-| Allowing a wildcard at the beginning of a word (eg "*ing") is particularly heavy, because all terms in the index need to be examined, just in case they match. Leading wildcards can be disabled by setting 'AllowLeadingWildcard' to false. -}
340−newtype AllowLeadingWildcard = AllowLeadingWildcard Bool deriving (Eq, Show)
355+newtype AllowLeadingWildcard = AllowLeadingWildcard Bool deriving (Eq, Show, Generic)
341−newtype LowercaseExpanded = LowercaseExpanded Bool deriving (Eq, Show)
356+newtype LowercaseExpanded = LowercaseExpanded Bool deriving (Eq, Show, Generic)
342−newtype EnablePositionIncrements = EnablePositionIncrements Bool deriving (Eq, Show)
357+newtype EnablePositionIncrements = EnablePositionIncrements Bool deriving (Eq, Show, Generic)
358+{-| By default, wildcard terms in a query are not analyzed.
359+ Setting 'AnalyzeWildcard' to true enables best-effort analysis. -}
343−newtype AnalyzeWildcard = AnalyzeWildcard Bool deriving (Eq, Show)
360+newtype AnalyzeWildcard = AnalyzeWildcard Bool deriving (Eq, Show, Generic)
361+{-| 'GeneratePhraseQueries' defaults to false. -}
344−newtype GeneratePhraseQueries = GeneratePhraseQueries Bool deriving (Eq, Show)
362+newtype GeneratePhraseQueries = GeneratePhraseQueries Bool deriving (Eq, Show, Generic)
363+{-| 'Locale' is used for string conversions - defaults to ROOT. -}
345−newtype Locale = Locale Text deriving (Eq, Show)
364+newtype Locale = Locale Text deriving (Eq, Show, Generic)
346newtype MaxWordLength = MaxWordLength Int deriving (Eq, Show, Generic)
365newtype MaxWordLength = MaxWordLength Int deriving (Eq, Show, Generic)
347newtype MinWordLength = MinWordLength Int deriving (Eq, Show, Generic)
366newtype MinWordLength = MinWordLength Int deriving (Eq, Show, Generic)
367+{-| 'PhraseSlop' sets the default slop for phrases, 0 means exact
368+ phrase matches. Default is 0. -}
348newtype PhraseSlop = PhraseSlop Int deriving (Eq, Show, Generic)
369newtype PhraseSlop = PhraseSlop Int deriving (Eq, Show, Generic)
349newtype MinDocFrequency = MinDocFrequency Int deriving (Eq, Show, Generic)
370newtype MinDocFrequency = MinDocFrequency Int deriving (Eq, Show, Generic)
350newtype MaxDocFrequency = MaxDocFrequency Int deriving (Eq, Show, Generic)
371newtype MaxDocFrequency = MaxDocFrequency Int deriving (Eq, Show, Generic)
@@ -438,7 +459,7 @@ data SimpleQueryFlag =
438-- use_dis_max and tie_breaker when fields are plural?
459-- use_dis_max and tie_breaker when fields are plural?
439data QueryStringQuery =
460data QueryStringQuery =
440 QueryStringQuery { queryStringQuery :: QueryString
461 QueryStringQuery { queryStringQuery :: QueryString
441− , queryStringDefaultField :: Maybe FieldOrFields
462+ , queryStringDefaultField :: Maybe FieldName
442 , queryStringOperator :: Maybe BooleanOperator
463 , queryStringOperator :: Maybe BooleanOperator
443 , queryStringAnalyzer :: Maybe Analyzer
464 , queryStringAnalyzer :: Maybe Analyzer
444 , queryStringAllowLeadingWildcard :: Maybe AllowLeadingWildcard
465 , queryStringAllowLeadingWildcard :: Maybe AllowLeadingWildcard
@@ -456,6 +477,13 @@ data QueryStringQuery =
456 , queryStringLocale :: Maybe Locale
477 , queryStringLocale :: Maybe Locale
457 } deriving (Eq, Show)
478 } deriving (Eq, Show)
480+mkQueryStringQuery :: QueryString -> QueryStringQuery
481+mkQueryStringQuery qs = QueryStringQuery qs Nothing Nothing
482+ Nothing Nothing Nothing Nothing
483+ Nothing Nothing Nothing Nothing
484+ Nothing Nothing Nothing Nothing
459data FieldOrFields = FofField FieldName
487data FieldOrFields = FofField FieldName
460 | FofFields [FieldName] deriving (Eq, Show)
488 | FofFields [FieldName] deriving (Eq, Show)