@@ -1,5 +1,3 @@
1−{-# LANGUAGE DeriveDataTypeable #-}
2−{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE FlexibleContexts #-}
1{-# LANGUAGE FlexibleContexts #-}
4{-# LANGUAGE FlexibleInstances #-}
2{-# LANGUAGE FlexibleInstances #-}
5{-# LANGUAGE GeneralizedNewtypeDeriving #-}
3{-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -16,7 +14,7 @@
16-- License : BSD-style (see the file LICENSE)
14-- License : BSD-style (see the file LICENSE)
17-- Maintainer : Chris Allen <cma@bitemyapp.com
15-- Maintainer : Chris Allen <cma@bitemyapp.com
18-- Stability : provisional
16-- Stability : provisional
19−-- Portability : DeriveGeneric, RecordWildCards
17+-- Portability : RecordWildCards
21-- Data types for describing actions and data structures performed to interact
19-- Data types for describing actions and data structures performed to interact
22-- with Elasticsearch. The two main buckets your queries against Elasticsearch
20-- with Elasticsearch. The two main buckets your queries against Elasticsearch
@@ -357,6 +355,9 @@ module Database.V5.Bloodhound.Types
357 , SuggestOptions(..)
355 , SuggestOptions(..)
358 , SuggestResponse(..)
356 , SuggestResponse(..)
359 , NamedSuggestionResponse(..)
357 , NamedSuggestionResponse(..)
358+ , DirectGenerators(..)
359+ , mkDirectGenerators
360+ , DirectGeneratorSuggestModeTypes (..)
361 , Aggregation(..)
362 , Aggregation(..)
362 , Aggregations
363 , Aggregations
@@ -407,44 +408,6 @@ module Database.V5.Bloodhound.Types
407 , TokenChar(..)
408 , TokenChar(..)
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)
417−-- import Data.Aeson.Types (Pair, Parser,
419−-- parseEither, parseMaybe,
421−-- import qualified Data.ByteString.Lazy.Char8 as L
423−-- import Data.Hashable (Hashable)
424−-- import qualified Data.HashMap.Strict as HM
425−-- import Data.List (foldl', intercalate,
427−-- import Data.List.NonEmpty (NonEmpty (..), toList)
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,
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
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
448import Bloodhound.Import
411import Bloodhound.Import
450import qualified Data.Traversable as DT
413import qualified Data.Traversable as DT
@@ -1659,6 +1622,7 @@ data PhraseSuggester =
1659 , phraseSuggesterShardSize :: Maybe Int
1622 , phraseSuggesterShardSize :: Maybe Int
1660 , phraseSuggesterHighlight :: Maybe PhraseSuggesterHighlighter
1623 , phraseSuggesterHighlight :: Maybe PhraseSuggesterHighlighter
1661 , phraseSuggesterCollate :: Maybe PhraseSuggesterCollate
1624 , phraseSuggesterCollate :: Maybe PhraseSuggesterCollate
1625+ , phraseSuggesterCandidateGenerators :: [DirectGenerators]
1663 deriving (Eq, Show)
1627 deriving (Eq, Show)
@@ -1674,6 +1638,7 @@ instance ToJSON PhraseSuggester where
1674 , "shard_size" .= phraseSuggesterShardSize
1638 , "shard_size" .= phraseSuggesterShardSize
1675 , "highlight" .= phraseSuggesterHighlight
1639 , "highlight" .= phraseSuggesterHighlight
1676 , "collate" .= phraseSuggesterCollate
1640 , "collate" .= phraseSuggesterCollate
1641+ , "direct_generator" .= phraseSuggesterCandidateGenerators
1679instance FromJSON PhraseSuggester where
1644instance FromJSON PhraseSuggester where
@@ -1690,11 +1655,12 @@ instance FromJSON PhraseSuggester where
1690 <*> o .:? "shard_size"
1655 <*> o .:? "shard_size"
1691 <*> o .:? "highlight"
1656 <*> o .:? "highlight"
1692 <*> o .:? "collate"
1657 <*> o .:? "collate"
1658+ <*> o .:? "direct_generator" .!= []
1694mkPhraseSuggester :: FieldName -> PhraseSuggester
1660mkPhraseSuggester :: FieldName -> PhraseSuggester
1695mkPhraseSuggester fName =
1661mkPhraseSuggester fName =
1696 PhraseSuggester fName Nothing Nothing Nothing Nothing Nothing Nothing
1662 PhraseSuggester fName Nothing Nothing Nothing Nothing Nothing Nothing
1697− Nothing Nothing Nothing Nothing
1663+ Nothing Nothing Nothing Nothing []
1699data PhraseSuggesterHighlighter =
1665data PhraseSuggesterHighlighter =
1700 PhraseSuggesterHighlighter { phraseSuggesterHighlighterPreTag :: Text
1666 PhraseSuggesterHighlighter { phraseSuggesterHighlighterPreTag :: Text
@@ -1784,3 +1750,68 @@ instance FromJSON NamedSuggestionResponse where
1784 return $ NamedSuggestionResponse suggestionName' suggestionResponses'
1750 return $ NamedSuggestionResponse suggestionName' suggestionResponses'
1786 parseJSON x = typeMismatch "NamedSuggestionResponse" x
1752 parseJSON x = typeMismatch "NamedSuggestionResponse" x
1754+data DirectGeneratorSuggestModeTypes = DirectGeneratorSuggestModeMissing
1755+ | DirectGeneratorSuggestModePopular
1756+ | DirectGeneratorSuggestModeAlways
1757+ deriving (Eq, Show)
1759+instance ToJSON DirectGeneratorSuggestModeTypes where
1760+ toJSON DirectGeneratorSuggestModeMissing = "missing"
1761+ toJSON DirectGeneratorSuggestModePopular = "popular"
1762+ toJSON DirectGeneratorSuggestModeAlways = "always"
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)
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
1784+ deriving (Eq, Show)
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
1801+instance FromJSON DirectGenerators where
1802+ parseJSON = withObject "DirectGenerators" parse
1803+ where parse o = DirectGenerators
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"
1816+mkDirectGenerators :: FieldName -> DirectGenerators
1817+mkDirectGenerators fn = DirectGenerators fn Nothing DirectGeneratorSuggestModeMissing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing