@@ -196,6 +196,8 @@ module Database.V5.Bloodhound.Types
196 , RangeQuery(..)
196 , RangeQuery(..)
197 , RegexpQuery(..)
197 , RegexpQuery(..)
198 , QueryString(..)
198 , QueryString(..)
199+ , TemplateQueryInline(..)
200+ , TemplateQueryKeyValuePairs(..)
199 , BooleanOperator(..)
201 , BooleanOperator(..)
200 , ZeroTermsQuery(..)
202 , ZeroTermsQuery(..)
201 , CutoffFrequency(..)
203 , CutoffFrequency(..)
@@ -1211,6 +1213,7 @@ data Query =
1211 | QueryRegexpQuery RegexpQuery
1213 | QueryRegexpQuery RegexpQuery
1212 | QueryExistsQuery FieldName
1214 | QueryExistsQuery FieldName
1213 | QueryMatchNoneQuery
1215 | QueryMatchNoneQuery
1216+ | QueryTemplateQueryInline TemplateQueryInline
1214 deriving (Eq, Read, Show, Generic, Typeable)
1217 deriving (Eq, Read, Show, Generic, Typeable)
1216-- | As of Elastic 2.0, 'Filters' are just 'Queries' housed in a Bool Query, and
1219-- | As of Elastic 2.0, 'Filters' are just 'Queries' housed in a Bool Query, and
@@ -1622,6 +1625,38 @@ data DistanceRange =
1622 DistanceRange { distanceFrom :: Distance
1625 DistanceRange { distanceFrom :: Distance
1623 , distanceTo :: Distance } deriving (Eq, Read, Show, Generic, Typeable)
1626 , distanceTo :: Distance } deriving (Eq, Read, Show, Generic, Typeable)
1628+type TemplateQueryKey = Text
1629+type TemplateQueryValue = Text
1631+newtype TemplateQueryKeyValuePairs = TemplateQueryKeyValuePairs (HM.HashMap TemplateQueryKey TemplateQueryValue)
1632+ deriving (Eq, Read, Show, Generic)
1634+instance ToJSON TemplateQueryKeyValuePairs where
1635+ toJSON (TemplateQueryKeyValuePairs x) = Object $ HM.map toJSON x
1637+instance FromJSON TemplateQueryKeyValuePairs where
1638+ parseJSON (Object o) = pure . TemplateQueryKeyValuePairs $ HM.mapMaybe getValue o
1639+ where getValue (String x) = Just x
1640+ getValue _ = Nothing
1641+ parseJSON _ = fail "error parsing TemplateQueryKeyValuePairs"
1643+data TemplateQueryInline =
1644+ TemplateQueryInline { inline :: Query
1645+ , params :: TemplateQueryKeyValuePairs
1647+ deriving (Eq, Read, Show, Generic, Typeable)
1649+instance ToJSON TemplateQueryInline where
1650+ toJSON TemplateQueryInline{..} = object [ "inline" .= inline
1651+ , "params" .= params
1654+instance FromJSON TemplateQueryInline where
1655+ parseJSON = withObject "TemplateQueryInline" parse
1656+ where parse o = TemplateQueryInline
1625data SearchResult a =
1660data SearchResult a =
1626 SearchResult { took :: Int
1661 SearchResult { took :: Int
1627 , timedOut :: Bool
1662 , timedOut :: Bool
@@ -2220,6 +2255,9 @@ instance ToJSON Query where
2220 toJSON QueryMatchNoneQuery =
2255 toJSON QueryMatchNoneQuery =
2221 object ["match_none" .= object []]
2256 object ["match_none" .= object []]
2258+ toJSON (QueryTemplateQueryInline templateQuery) =
2259+ object [ "template" .= templateQuery ]
2223instance FromJSON Query where
2261instance FromJSON Query where
2224 parseJSON v = withObject "Query" parse v
2262 parseJSON v = withObject "Query" parse v
2225 where parse o = termQuery `taggedWith` "term"
2263 where parse o = termQuery `taggedWith` "term"
@@ -2247,6 +2285,7 @@ instance FromJSON Query where
2247 <|> queryRangeQuery `taggedWith` "range"
2285 <|> queryRangeQuery `taggedWith` "range"
2248 <|> queryRegexpQuery `taggedWith` "regexp"
2286 <|> queryRegexpQuery `taggedWith` "regexp"
2249 <|> querySimpleQueryStringQuery `taggedWith` "simple_query_string"
2287 <|> querySimpleQueryStringQuery `taggedWith` "simple_query_string"
2288+ <|> queryTemplateQueryInline `taggedWith` "template"
2250 where taggedWith parser k = parser =<< o .: k
2289 where taggedWith parser k = parser =<< o .: k
2251 termQuery = fieldTagged $ \(FieldName fn) o ->
2290 termQuery = fieldTagged $ \(FieldName fn) o ->
2252 TermQuery <$> (Term fn <$> o .: "value") <*> o .:? "boost"
2291 TermQuery <$> (Term fn <$> o .: "value") <*> o .:? "boost"
@@ -2284,6 +2323,7 @@ instance FromJSON Query where
2284 queryRegexpQuery = pure . QueryRegexpQuery
2323 queryRegexpQuery = pure . QueryRegexpQuery
2285 querySimpleQueryStringQuery = pure . QuerySimpleQueryStringQuery
2324 querySimpleQueryStringQuery = pure . QuerySimpleQueryStringQuery
2286 queryExistsQuery o = QueryExistsQuery <$> o .: "field"
2325 queryExistsQuery o = QueryExistsQuery <$> o .: "field"
2326+ queryTemplateQueryInline = pure . QueryTemplateQueryInline
2289omitNulls :: [(Text, Value)] -> Value
2329omitNulls :: [(Text, Value)] -> Value