2727}
2828
2929
30+ def _get_value_for_terms_query (value : dict ):
31+ """Return property value for terms queries."""
32+ if isinstance (value , dict ):
33+ if "property" in value :
34+ return value ["property" ]
35+ return value
36+
37+
3038def _replace_like_patterns (match : re .Match ) -> str :
3139 pattern = match .group ()
3240 try :
@@ -159,9 +167,15 @@ def to_es(queryables_mapping: Dict[str, Any], query: Dict[str, Any]) -> Dict[str
159167 return {"range" : {field : {range_op [query ["op" ]]: value }}}
160168 else :
161169 if query ["op" ] == ComparisonOp .EQ :
162- return {"term" : {field : value }}
170+ return {"term" : {field : _get_value_for_terms_query ( value ) }}
163171 elif query ["op" ] == ComparisonOp .NEQ :
164- return {"bool" : {"must_not" : [{"term" : {field : value }}]}}
172+ return {
173+ "bool" : {
174+ "must_not" : [
175+ {"term" : {field : _get_value_for_terms_query (value )}}
176+ ]
177+ }
178+ }
165179 else :
166180 return {"range" : {field : {range_op [query ["op" ]]: value }}}
167181
@@ -183,7 +197,7 @@ def to_es(queryables_mapping: Dict[str, Any], query: Dict[str, Any]) -> Dict[str
183197 values = query ["args" ][1 ]
184198 if not isinstance (values , list ):
185199 raise ValueError (f"Arg { values } is not a list" )
186- return {"terms" : {field : values }}
200+ return {"terms" : {field : [ _get_value_for_terms_query ( x ) for x in values ] }}
187201
188202 elif query ["op" ] == AdvancedComparisonOp .LIKE :
189203 field = to_es_field (queryables_mapping , query ["args" ][0 ]["property" ])
0 commit comments