@@ -834,17 +834,18 @@ instance FromJSON DisMaxQuery where
834834 <*> o .:? "boost"
835835
836836data MatchQuery = MatchQuery
837− { matchQueryField :: FieldName
838− , matchQueryQueryString :: QueryString
839− , matchQueryOperator :: BooleanOperator
840− , matchQueryZeroTerms :: ZeroTermsQuery
841− , matchQueryCutoffFrequency :: Maybe CutoffFrequency
842− , matchQueryMatchType :: Maybe MatchQueryType
843− , matchQueryAnalyzer :: Maybe Analyzer
844− , matchQueryMaxExpansions :: Maybe MaxExpansions
845− , matchQueryLenient :: Maybe Lenient
846− , matchQueryBoost :: Maybe Boost
837+ { matchQueryField :: FieldName
838+ , matchQueryQueryString :: QueryString
839+ , matchQueryOperator :: BooleanOperator
840+ , matchQueryZeroTerms :: ZeroTermsQuery
841+ , matchQueryCutoffFrequency :: Maybe CutoffFrequency
842+ , matchQueryMatchType :: Maybe MatchQueryType
843+ , matchQueryAnalyzer :: Maybe Analyzer
844+ , matchQueryMaxExpansions :: Maybe MaxExpansions
845+ , matchQueryLenient :: Maybe Lenient
846+ , matchQueryBoost :: Maybe Boost
847847 , matchQueryMinimumShouldMatch :: Maybe Text
848+ , matchQueryFuzziness :: Maybe Fuzziness
848849 } deriving (Eq, Show)
849850
850851
@@ -853,7 +854,7 @@ instance ToJSON MatchQuery where
853854 (QueryString mqQueryString) booleanOperator
854855 zeroTermsQuery cutoffFrequency matchQueryType
855856 analyzer maxExpansions lenient boost
856− minShouldMatch
857+ minShouldMatch mqFuzziness
857858 ) =
858859 object [ fieldName .= omitNulls base ]
859860 where base = [ "query" .= mqQueryString
@@ -866,6 +867,7 @@ instance ToJSON MatchQuery where
866867 , "lenient" .= lenient
867868 , "boost" .= boost
868869 , "minimum_should_match" .= minShouldMatch
870+ , "fuzziness" .= mqFuzziness
869871 ]
870872
871873instance FromJSON MatchQuery where
@@ -882,12 +884,13 @@ instance FromJSON MatchQuery where
882884 <*> o .:? "lenient"
883885 <*> o .:? "boost"
884886 <*> o .:? "minimum_should_match"
887+ <*> o .:? "fuzziness"
885888
886889{-| 'mkMatchQuery' is a convenience function that defaults the less common parameters,
887890 enabling you to provide only the 'FieldName' and 'QueryString' to make a 'MatchQuery'
888891-}
889892mkMatchQuery :: FieldName -> QueryString -> MatchQuery
890−mkMatchQuery field query = MatchQuery field query Or ZeroTermsNone Nothing Nothing Nothing Nothing Nothing Nothing Nothing
893+mkMatchQuery field query = MatchQuery field query Or ZeroTermsNone Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
891894
892895data MatchQueryType =
893896 MatchPhrase
@@ -1621,3 +1624,17 @@ fieldTagged :: Monad m => (FieldName -> Object -> m a) -> Object -> m a
16211624fieldTagged f o = case HM.toList o of
16221625 [(k, Object o')] -> f (FieldName k) o'
16231626 _ -> fail "Expected object with 1 field-named key"
1627+
1628+-- | Fuzziness value as a number or 'AUTO'.
1629+-- See:
1630+-- https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness
1631+data Fuzziness = Fuzziness Double | FuzzinessAuto
1632+ deriving (Eq, Show)
1633+
1634+instance ToJSON Fuzziness where
1635+ toJSON (Fuzziness n) = toJSON n
1636+ toJSON FuzzinessAuto = String "AUTO"
1637+
1638+instance FromJSON Fuzziness where
1639+ parseJSON (String "AUTO") = return FuzzinessAuto
1640+ parseJSON v = Fuzziness <$> parseJSON v