@@ -1,5 +1,3 @@
1−{-# LANGUAGE DeriveDataTypeable #-}
2−{-# LANGUAGE DeriveGeneric #-}
31{-# LANGUAGE FlexibleContexts #-}
42{-# LANGUAGE FlexibleInstances #-}
53{-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -16,7 +14,7 @@
1614-- License : BSD-style (see the file LICENSE)
1715-- Maintainer : Chris Allen <cma@bitemyapp.com
1816-- Stability : provisional
19−-- Portability : DeriveGeneric, RecordWildCards
17+-- Portability : RecordWildCards
2018--
2119-- Data types for describing actions and data structures performed to interact
2220-- with Elasticsearch. The two main buckets your queries against Elasticsearch
@@ -357,6 +355,9 @@ module Database.V5.Bloodhound.Types
357355 , SuggestOptions(..)
358356 , SuggestResponse(..)
359357 , NamedSuggestionResponse(..)
358+ , DirectGenerators(..)
359+ , mkDirectGenerators
360+ , DirectGeneratorSuggestModeTypes (..)
360361
361362 , Aggregation(..)
362363 , Aggregations
@@ -407,44 +408,6 @@ module Database.V5.Bloodhound.Types
407408 , TokenChar(..)
408409 ) where
409410
410−-- import Control.Applicative as A
411−-- import Control.Arrow (first)
412−-- import Control.Monad.Catch
413−-- import Control.Monad.Except
414−-- import Control.Monad.State (MonadState)
415−-- import Control.Monad.Writer (MonadWriter)
416−-- import Data.Aeson
417−-- import Data.Aeson.Types (Pair, Parser,
418−-- emptyObject,
419−-- parseEither, parseMaybe,
420−-- typeMismatch)
421−-- import qualified Data.ByteString.Lazy.Char8 as L
422−-- import Data.Char
423−-- import Data.Hashable (Hashable)
424−-- import qualified Data.HashMap.Strict as HM
425−-- import Data.List (foldl', intercalate,
426−-- nub)
427−-- import Data.List.NonEmpty (NonEmpty (..), toList)
428−-- import Data.Maybe
429−-- import Data.Scientific (Scientific)
430−-- import Data.Semigroup
431−-- import Data.Text (Text)
432−-- import qualified Data.Text as T
433−-- import Data.Time.Calendar
434−-- import Data.Time.Clock (NominalDiffTime,
435−-- UTCTime)
436−-- import Data.Time.Clock.POSIX
437−-- import qualified Data.Traversable as DT
438−-- import Data.Typeable (Typeable)
439−-- import qualified Data.Vector as V
440−-- import qualified Data.Version as Vers
441−-- import GHC.Enum
442−-- import GHC.Generics (Generic)
443−-- import Network.HTTP.Client
444−-- import qualified Network.HTTP.Types.Method as NHTM
445−-- import qualified Text.ParserCombinators.ReadP as RP
446−-- import qualified Text.Read as TR
447−
448411import Bloodhound.Import
449412
450413import qualified Data.Traversable as DT
@@ -1659,6 +1622,7 @@ data PhraseSuggester =
16591622 , phraseSuggesterShardSize :: Maybe Int
16601623 , phraseSuggesterHighlight :: Maybe PhraseSuggesterHighlighter
16611624 , phraseSuggesterCollate :: Maybe PhraseSuggesterCollate
1625+ , phraseSuggesterCandidateGenerators :: [DirectGenerators]
16621626 }
16631627 deriving (Eq, Show)
16641628
@@ -1674,6 +1638,7 @@ instance ToJSON PhraseSuggester where
16741638 , "shard_size" .= phraseSuggesterShardSize
16751639 , "highlight" .= phraseSuggesterHighlight
16761640 , "collate" .= phraseSuggesterCollate
1641+ , "direct_generator" .= phraseSuggesterCandidateGenerators
16771642 ]
16781643
16791644instance FromJSON PhraseSuggester where
@@ -1690,11 +1655,12 @@ instance FromJSON PhraseSuggester where
16901655 <*> o .:? "shard_size"
16911656 <*> o .:? "highlight"
16921657 <*> o .:? "collate"
1658+ <*> o .:? "direct_generator" .!= []
16931659
16941660mkPhraseSuggester :: FieldName -> PhraseSuggester
16951661mkPhraseSuggester fName =
16961662 PhraseSuggester fName Nothing Nothing Nothing Nothing Nothing Nothing
1697− Nothing Nothing Nothing Nothing
1663+ Nothing Nothing Nothing Nothing []
16981664
16991665data PhraseSuggesterHighlighter =
17001666 PhraseSuggesterHighlighter { phraseSuggesterHighlighterPreTag :: Text
@@ -1784,3 +1750,68 @@ instance FromJSON NamedSuggestionResponse where
17841750 return $ NamedSuggestionResponse suggestionName' suggestionResponses'
17851751
17861752 parseJSON x = typeMismatch "NamedSuggestionResponse" x
1753+
1754+data DirectGeneratorSuggestModeTypes = DirectGeneratorSuggestModeMissing
1755+ | DirectGeneratorSuggestModePopular
1756+ | DirectGeneratorSuggestModeAlways
1757+ deriving (Eq, Show)
1758+
1759+instance ToJSON DirectGeneratorSuggestModeTypes where
1760+ toJSON DirectGeneratorSuggestModeMissing = "missing"
1761+ toJSON DirectGeneratorSuggestModePopular = "popular"
1762+ toJSON DirectGeneratorSuggestModeAlways = "always"
1763+
1764+instance FromJSON DirectGeneratorSuggestModeTypes where
1765+ parseJSON = withText "DirectGeneratorSuggestModeTypes" parse
1766+ where parse "missing" = pure DirectGeneratorSuggestModeMissing
1767+ parse "popular" = pure DirectGeneratorSuggestModePopular
1768+ parse "always" = pure DirectGeneratorSuggestModeAlways
1769+ parse f = fail ("Unexpected DirectGeneratorSuggestModeTypes: " <> show f)
1770+
1771+data DirectGenerators = DirectGenerators
1772+ { directGeneratorsField :: FieldName
1773+ , directGeneratorsSize :: Maybe Int
1774+ , directGeneratorSuggestMode :: DirectGeneratorSuggestModeTypes
1775+ , directGeneratorMaxEdits :: Maybe Double
1776+ , directGeneratorPrefixLength :: Maybe Int
1777+ , directGeneratorMinWordLength :: Maybe Int
1778+ , directGeneratorMaxInspections :: Maybe Int
1779+ , directGeneratorMinDocFreq :: Maybe Double
1780+ , directGeneratorMaxTermFreq :: Maybe Double
1781+ , directGeneratorPreFilter :: Maybe Text
1782+ , directGeneratorPostFilter :: Maybe Text
1783+ }
1784+ deriving (Eq, Show)
1785+
1786+
1787+instance ToJSON DirectGenerators where
1788+ toJSON DirectGenerators{..} = omitNulls [ "field" .= directGeneratorsField
1789+ , "size" .= directGeneratorsSize
1790+ , "suggest_mode" .= directGeneratorSuggestMode
1791+ , "max_edits" .= directGeneratorMaxEdits
1792+ , "prefix_length" .= directGeneratorPrefixLength
1793+ , "min_word_length" .= directGeneratorMinWordLength
1794+ , "max_inspections" .= directGeneratorMaxInspections
1795+ , "min_doc_freq" .= directGeneratorMinDocFreq
1796+ , "max_term_freq" .= directGeneratorMaxTermFreq
1797+ , "pre_filter" .= directGeneratorPreFilter
1798+ , "post_filter" .= directGeneratorPostFilter
1799+ ]
1800+
1801+instance FromJSON DirectGenerators where
1802+ parseJSON = withObject "DirectGenerators" parse
1803+ where parse o = DirectGenerators
1804+ <$> o .: "field"
1805+ <*> o .:? "size"
1806+ <*> o .: "suggest_mode"
1807+ <*> o .:? "max_edits"
1808+ <*> o .:? "prefix_length"
1809+ <*> o .:? "min_word_length"
1810+ <*> o .:? "max_inspections"
1811+ <*> o .:? "min_doc_freq"
1812+ <*> o .:? "max_term_freq"
1813+ <*> o .:? "pre_filter"
1814+ <*> o .:? "post_filter"
1815+
1816+mkDirectGenerators :: FieldName -> DirectGenerators
1817+mkDirectGenerators fn = DirectGenerators fn Nothing DirectGeneratorSuggestModeMissing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing