@@ -17,6 +17,7 @@ module Database.Bloodhound.Types
1717 , mkMultiMatchQuery
1818 , mkBoolQuery
1919 , mkRangeQuery
20+ , mkQueryStringQuery
2021 , Version(..)
2122 , Status(..)
2223 , Existence(..)
@@ -126,6 +127,12 @@ module Database.Bloodhound.Types
126127 , FieldDefinition(..)
127128 , MappingField(..)
128129 , Mapping(..)
130+ , AllowLeadingWildcard(..)
131+ , LowercaseExpanded(..)
132+ , GeneratePhraseQueries(..)
133+ , Locale(..)
134+ , AnalyzeWildcard(..)
135+ , EnablePositionIncrements(..)
129136 ) where
130137
131138import Data.Aeson
@@ -307,24 +314,30 @@ newtype MappingName = MappingName String deriving (Eq, Generic, Sho
307314 at specific documents. -}
308315newtype DocId = DocId String deriving (Eq, Generic, Show)
309316{-| 'QueryString' is used to wrap query text bodies, be they human written or not. -}
310−newtype QueryString = QueryString Text deriving (Eq, Show)
311−{-| 'FieldName' is used all over the place wherever a specific field within a document
312− needs to be specified, usually in 'Query's or 'Filter's. -}
317+newtype QueryString = QueryString Text deriving (Eq, Generic, Show)
318+{-| 'FieldName' is used all over the place wherever a specific field within
319+ a document needs to be specified, usually in 'Query's or 'Filter's. -}
313320newtype FieldName = FieldName Text deriving (Eq, Show)
314321{-| 'CacheName' is used in 'RegexpQuery' and 'RegexpFilter' for describing the
315322 'CacheKey' keyed caching behavior. -}
316323newtype 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. -}
318326newtype CacheKey = CacheKey Text deriving (Eq, Show)
319327newtype Existence = Existence Bool deriving (Eq, Show)
320328newtype NullValue = NullValue Bool deriving (Eq, Show)
321329newtype CutoffFrequency = CutoffFrequency Double deriving (Eq, Show, Generic)
322330newtype Analyzer = Analyzer Text deriving (Eq, Show, Generic)
323331newtype 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. -}
324335newtype Lenient = Lenient Bool deriving (Eq, Show, Generic)
325336newtype Tiebreaker = Tiebreaker Double deriving (Eq, Show, Generic)
326337newtype Boost = Boost Double deriving (Eq, Show, Generic)
327338newtype 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. -}
328341newtype MinimumMatch = MinimumMatch Int deriving (Eq, Show, Generic)
329342newtype MinimumMatchText = MinimumMatchText Text deriving (Eq, Show)
330343newtype DisableCoord = DisableCoord Bool deriving (Eq, Show, Generic)
@@ -332,19 +345,27 @@ newtype IgnoreTermFrequency = IgnoreTermFrequency Bool deriving (Eq, Show,
332345newtype MinimumTermFrequency = MinimumTermFrequency Int deriving (Eq, Show, Generic)
333346newtype MaxQueryTerms = MaxQueryTerms Int deriving (Eq, Show, Generic)
334347newtype Fuzziness = Fuzziness Double deriving (Eq, Show, Generic)
348+{-| 'PrefixLength' is the prefix length used in queries, defaults to 0. -}
335349newtype PrefixLength = PrefixLength Int deriving (Eq, Show, Generic)
336350newtype TypeName = TypeName Text deriving (Eq, Show, Generic)
337351newtype PercentMatch = PercentMatch Double deriving (Eq, Show, Generic)
338352newtype StopWord = StopWord Text deriving (Eq, Show, Generic)
339353newtype QueryPath = QueryPath Text deriving (Eq, Show, Generic)
340−newtype AllowLeadingWildcard = AllowLeadingWildcard Bool deriving (Eq, Show)
341−newtype LowercaseExpanded = LowercaseExpanded Bool deriving (Eq, Show)
342−newtype EnablePositionIncrements = EnablePositionIncrements Bool deriving (Eq, Show)
343−newtype AnalyzeWildcard = AnalyzeWildcard Bool deriving (Eq, Show)
344−newtype GeneratePhraseQueries = GeneratePhraseQueries Bool deriving (Eq, Show)
345−newtype Locale = Locale Text deriving (Eq, Show)
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. -}
355+newtype AllowLeadingWildcard = AllowLeadingWildcard Bool deriving (Eq, Show, Generic)
356+newtype LowercaseExpanded = LowercaseExpanded Bool deriving (Eq, Show, Generic)
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. -}
360+newtype AnalyzeWildcard = AnalyzeWildcard Bool deriving (Eq, Show, Generic)
361+{-| 'GeneratePhraseQueries' defaults to false. -}
362+newtype GeneratePhraseQueries = GeneratePhraseQueries Bool deriving (Eq, Show, Generic)
363+{-| 'Locale' is used for string conversions - defaults to ROOT. -}
364+newtype Locale = Locale Text deriving (Eq, Show, Generic)
346365newtype MaxWordLength = MaxWordLength Int deriving (Eq, Show, Generic)
347366newtype MinWordLength = MinWordLength Int deriving (Eq, Show, Generic)
367+{-| 'PhraseSlop' sets the default slop for phrases, 0 means exact
368+ phrase matches. Default is 0. -}
348369newtype PhraseSlop = PhraseSlop Int deriving (Eq, Show, Generic)
349370newtype MinDocFrequency = MinDocFrequency Int deriving (Eq, Show, Generic)
350371newtype MaxDocFrequency = MaxDocFrequency Int deriving (Eq, Show, Generic)
@@ -438,7 +459,7 @@ data SimpleQueryFlag =
438459-- use_dis_max and tie_breaker when fields are plural?
439460data QueryStringQuery =
440461 QueryStringQuery { queryStringQuery :: QueryString
441− , queryStringDefaultField :: Maybe FieldOrFields
462+ , queryStringDefaultField :: Maybe FieldName
442463 , queryStringOperator :: Maybe BooleanOperator
443464 , queryStringAnalyzer :: Maybe Analyzer
444465 , queryStringAllowLeadingWildcard :: Maybe AllowLeadingWildcard
@@ -456,6 +477,13 @@ data QueryStringQuery =
456477 , queryStringLocale :: Maybe Locale
457478 } deriving (Eq, Show)
458479
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
485+ Nothing Nothing
486+
459487data FieldOrFields = FofField FieldName
460488 | FofFields [FieldName] deriving (Eq, Show)
461489