@@ -13,6 +13,7 @@ import Data.Monoid
13import qualified Data.Text as T
13import qualified Data.Text as T
14import Database.Bloodhound.Types
14import Database.Bloodhound.Types
15import Database.Bloodhound.Types.Class
15import Database.Bloodhound.Types.Class
16+import Data.Scientific
17instance Monoid Filter where
18instance Monoid Filter where
18 mempty = IdentityFilter
19 mempty = IdentityFilter
@@ -129,9 +130,7 @@ instance ToJSON Query where
129 object [termField .= object merged]]
130 object [termField .= object merged]]
131 base = [ "value" .= termValue ]
132 base = [ "value" .= termValue ]
132− boosted = case boost of
133+ boosted = maybe [] (return . ("boost" .=)) boost
133− (Just boostValue) -> [ "boost" .= boostValue ]
135 merged = mappend base boosted
134 merged = mappend base boosted
137 toJSON (QueryMatchQuery matchQuery) =
136 toJSON (QueryMatchQuery matchQuery) =
@@ -146,11 +145,36 @@ instance ToJSON Query where
146 toJSON (QueryBoostingQuery boostingQuery) =
145 toJSON (QueryBoostingQuery boostingQuery) =
147 object ["boosting" .= toJSON boostingQuery]
146 object ["boosting" .= toJSON boostingQuery]
148+ toJSON (QueryCommonTermsQuery commonTermsQuery) =
149+ object ["common" .= toJSON commonTermsQuery]
150mField :: (ToJSON a, Functor f) => T.Text -> f a -> f (T.Text, Value)
151mField :: (ToJSON a, Functor f) => T.Text -> f a -> f (T.Text, Value)
151mField field = fmap ((field .=) . toJSON)
152mField field = fmap ((field .=) . toJSON)
155+instance ToJSON CommonTermsQuery where
156+ toJSON (CommonTermsQuery (FieldName fieldName)
157+ (QueryString query) cf lfo hfo msm
158+ boost analyzer disableCoord) =
159+ object [fieldName .= object conjoined]
160+ where base = [ "query" .= query
161+ , "cutoff_frequency" .= toJSON cf
162+ , "low_freq_operator" .= toJSON lfo
163+ , "high_freq_operator" .= toJSON hfo ]
164+ extension = catMaybes
165+ [ mField "minimum_should_match" msm
166+ , mField "boost" boost
167+ , mField "analyzer" analyzer
168+ , mField "disable_coord" disableCoord ]
169+ conjoined = base ++ extension
172+instance ToJSON CommonMinimumMatch where
173+ toJSON (CommonMinimumMatch mm) = toJSON mm
174+ toJSON (CommonMinimumMatchHighLow (MinimumMatchHighLow lowF highF)) =
175+ object [ "low_freq" .= toJSON lowF
176+ , "high_freq" .= toJSON highF ]
154instance ToJSON BoostingQuery where
178instance ToJSON BoostingQuery where
155 toJSON (BoostingQuery positiveQuery negativeQuery negativeBoost) =
179 toJSON (BoostingQuery positiveQuery negativeQuery negativeBoost) =
156 object [ "positive" .= toJSON positiveQuery
180 object [ "positive" .= toJSON positiveQuery