@@ -137,6 +137,8 @@ instance ToJSON Query where
137 toJSON (QueryMatchQuery matchQuery) =
137 toJSON (QueryMatchQuery matchQuery) =
138 object ["match" .= toJSON matchQuery]
138 object ["match" .= toJSON matchQuery]
140+ toJSON (QueryMultiMatchQuery multiMatchQuery) =
141+ object ["multi_match" .= toJSON multiMatchQuery]
141instance ToJSON MatchQuery where
143instance ToJSON MatchQuery where
142 toJSON (MatchQuery (FieldName fieldName)
144 toJSON (MatchQuery (FieldName fieldName)
@@ -155,6 +157,29 @@ instance ToJSON MatchQuery where
155 , f "max_expansions" maxExpansions
157 , f "max_expansions" maxExpansions
156 , f "lenient" lenient ]
158 , f "lenient" lenient ]
160+instance ToJSON MultiMatchQuery where
161+ toJSON (MultiMatchQuery fields (QueryString query) boolOp
162+ ztQ tb mmqt cf analyzer maxEx lenient) =
163+ object ["multi_match" .= object conjoined]
164+ where baseQuery = [ "fields" .= fmap toJSON fields
166+ , "operator" .= toJSON boolOp
167+ , "zero_terms_query" .= toJSON ztQ ]
168+ f field = fmap ((field .=) . toJSON)
169+ maybeAdd = catMaybes [ f "tiebreaker" tb
171+ , f "cutoff_frequency" cf
172+ , f "analyzer" analyzer
173+ , f "max_expansions" maxEx
174+ , f "lenient" lenient ]
175+ conjoined = baseQuery ++ maybeAdd
177+instance ToJSON MultiMatchQueryType where
178+ toJSON MultiMatchBestFields = "best_fields"
179+ toJSON MultiMatchMostFields = "most_fields"
180+ toJSON MultiMatchCrossFields = "cross_fields"
181+ toJSON MultiMatchPhrase = "phrase"
182+ toJSON MultiMatchPhrasePrefix = "phrase_prefix"
159instance ToJSON BooleanOperator where
184instance ToJSON BooleanOperator where
160 toJSON And = String "and"
185 toJSON And = String "and"
@@ -168,6 +193,9 @@ instance ToJSON MatchQueryType where
168 toJSON MatchPhrase = "phrase"
193 toJSON MatchPhrase = "phrase"
169 toJSON MatchPhrasePrefix = "phrase_prefix"
194 toJSON MatchPhrasePrefix = "phrase_prefix"
196+instance ToJSON FieldName where
197+ toJSON (FieldName fieldName) = String fieldName
171instance ToJSON ReplicaCount
199instance ToJSON ReplicaCount
172instance ToJSON ShardCount
200instance ToJSON ShardCount
173instance ToJSON CutoffFrequency
201instance ToJSON CutoffFrequency
@@ -176,6 +204,7 @@ instance ToJSON MaxExpansions
176instance ToJSON Lenient
204instance ToJSON Lenient
177instance ToJSON Boost
205instance ToJSON Boost
178instance ToJSON Version
206instance ToJSON Version
207+instance ToJSON Tiebreaker
179instance FromJSON Version
208instance FromJSON Version
180instance FromJSON IndexName
209instance FromJSON IndexName
181instance FromJSON MappingName
210instance FromJSON MappingName
@@ -233,6 +262,11 @@ instance ToJSON SortSpec where
233 lNestedFilter = maybeJson "nested_filter" nestedFilter
262 lNestedFilter = maybeJson "nested_filter" nestedFilter
234 merged = mconcat [base, lSortMode, lMissingSort, lNestedFilter]
263 merged = mconcat [base, lSortMode, lMissingSort, lNestedFilter]
265+ toJSON (GeoDistanceSortSpec sortOrder (GeoPoint (FieldName field) latLon) units) =
266+ object [ "unit" .= toJSON units
267+ , field .= toJSON latLon
268+ , "order" .= toJSON sortOrder ]
237instance ToJSON SortOrder where
271instance ToJSON SortOrder where
238 toJSON Ascending = String "asc"
272 toJSON Ascending = String "asc"