@@ -834,17 +834,18 @@ instance FromJSON DisMaxQuery where
834 <*> o .:? "boost"
834 <*> o .:? "boost"
836data MatchQuery = MatchQuery
836data MatchQuery = MatchQuery
837− { matchQueryField :: FieldName
837+ { matchQueryField :: FieldName
838− , matchQueryQueryString :: QueryString
838+ , matchQueryQueryString :: QueryString
839− , matchQueryOperator :: BooleanOperator
839+ , matchQueryOperator :: BooleanOperator
840− , matchQueryZeroTerms :: ZeroTermsQuery
840+ , matchQueryZeroTerms :: ZeroTermsQuery
841− , matchQueryCutoffFrequency :: Maybe CutoffFrequency
841+ , matchQueryCutoffFrequency :: Maybe CutoffFrequency
842− , matchQueryMatchType :: Maybe MatchQueryType
842+ , matchQueryMatchType :: Maybe MatchQueryType
843− , matchQueryAnalyzer :: Maybe Analyzer
843+ , matchQueryAnalyzer :: Maybe Analyzer
844− , matchQueryMaxExpansions :: Maybe MaxExpansions
844+ , matchQueryMaxExpansions :: Maybe MaxExpansions
845− , matchQueryLenient :: Maybe Lenient
845+ , matchQueryLenient :: Maybe Lenient
846− , matchQueryBoost :: Maybe Boost
846+ , matchQueryBoost :: Maybe Boost
847 , matchQueryMinimumShouldMatch :: Maybe Text
847 , matchQueryMinimumShouldMatch :: Maybe Text
848+ , matchQueryFuzziness :: Maybe Fuzziness
848 } deriving (Eq, Show)
849 } deriving (Eq, Show)
@@ -853,7 +854,7 @@ instance ToJSON MatchQuery where
853 (QueryString mqQueryString) booleanOperator
854 (QueryString mqQueryString) booleanOperator
854 zeroTermsQuery cutoffFrequency matchQueryType
855 zeroTermsQuery cutoffFrequency matchQueryType
855 analyzer maxExpansions lenient boost
856 analyzer maxExpansions lenient boost
856− minShouldMatch
857+ minShouldMatch mqFuzziness
858 object [ fieldName .= omitNulls base ]
859 object [ fieldName .= omitNulls base ]
859 where base = [ "query" .= mqQueryString
860 where base = [ "query" .= mqQueryString
@@ -866,6 +867,7 @@ instance ToJSON MatchQuery where
866 , "lenient" .= lenient
867 , "lenient" .= lenient
867 , "boost" .= boost
868 , "boost" .= boost
868 , "minimum_should_match" .= minShouldMatch
869 , "minimum_should_match" .= minShouldMatch
870+ , "fuzziness" .= mqFuzziness
871instance FromJSON MatchQuery where
873instance FromJSON MatchQuery where
@@ -882,12 +884,13 @@ instance FromJSON MatchQuery where
882 <*> o .:? "lenient"
884 <*> o .:? "lenient"
883 <*> o .:? "boost"
885 <*> o .:? "boost"
884 <*> o .:? "minimum_should_match"
886 <*> o .:? "minimum_should_match"
887+ <*> o .:? "fuzziness"
886{-| 'mkMatchQuery' is a convenience function that defaults the less common parameters,
889{-| 'mkMatchQuery' is a convenience function that defaults the less common parameters,
887 enabling you to provide only the 'FieldName' and 'QueryString' to make a 'MatchQuery'
890 enabling you to provide only the 'FieldName' and 'QueryString' to make a 'MatchQuery'
889mkMatchQuery :: FieldName -> QueryString -> MatchQuery
892mkMatchQuery :: 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
892data MatchQueryType =
895data MatchQueryType =
893 MatchPhrase
896 MatchPhrase
@@ -1621,3 +1624,17 @@ fieldTagged :: Monad m => (FieldName -> Object -> m a) -> Object -> m a
1621fieldTagged f o = case HM.toList o of
1624fieldTagged f o = case HM.toList o of
1622 [(k, Object o')] -> f (FieldName k) o'
1625 [(k, Object o')] -> f (FieldName k) o'
1623 _ -> fail "Expected object with 1 field-named key"
1626 _ -> fail "Expected object with 1 field-named key"
1628+-- | Fuzziness value as a number or 'AUTO'.
1630+-- https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness
1631+data Fuzziness = Fuzziness Double | FuzzinessAuto
1632+ deriving (Eq, Show)
1634+instance ToJSON Fuzziness where
1635+ toJSON (Fuzziness n) = toJSON n
1636+ toJSON FuzzinessAuto = String "AUTO"
1638+instance FromJSON Fuzziness where
1639+ parseJSON (String "AUTO") = return FuzzinessAuto
1640+ parseJSON v = Fuzziness <$> parseJSON v