@@ -13,13 +13,17 @@ def __init__(
1313 return_fields : Optional [List [str ]] = None ,
1414 num_results : int = 10 ,
1515 dialect : int = 2 ,
16+ sort_by : Optional [str ] = None ,
17+ in_order : bool = False ,
1618 ):
1719 """Base query class used to subclass many query types."""
1820 self ._return_fields = return_fields if return_fields is not None else []
1921 self ._num_results = num_results
2022 self ._dialect = dialect
2123 self ._first = 0
2224 self ._limit = num_results
25+ self ._sort_by = sort_by
26+ self ._in_order = in_order
2327
2428 def __str__ (self ) -> str :
2529 return " " .join ([str (x ) for x in self .query .get_args ()])
@@ -137,6 +141,7 @@ def __init__(
137141 num_results : int = 10 ,
138142 dialect : int = 2 ,
139143 sort_by : Optional [str ] = None ,
144+ in_order : bool = False ,
140145 params : Optional [Dict [str , Any ]] = None ,
141146 ):
142147 """A query for a running a filtered search with a filter expression.
@@ -149,6 +154,9 @@ def __init__(
149154 return. Defaults to 10.
150155 sort_by (Optional[str]): The field to order the results by. Defaults
151156 to None. Results will be ordered by vector distance.
157+ in_order (bool): Requires the terms in the field to have
158+ the same order as the terms in the query filter, regardless of
159+ the offsets between them. Defaults to False.
152160 params (Optional[Dict[str, Any]], optional): The parameters for the
153161 query. Defaults to None.
154162
@@ -165,9 +173,8 @@ def __init__(
165173 q = FilterQuery(return_fields=["brand", "price"], filter_expression=t)
166174
167175 """
168- super ().__init__ (return_fields , num_results , dialect )
176+ super ().__init__ (return_fields , num_results , dialect , sort_by , in_order )
169177 self .set_filter (filter_expression )
170- self ._sort_by = sort_by
171178 self ._params = params or {}
172179
173180 @property
@@ -186,6 +193,10 @@ def query(self) -> Query:
186193 )
187194 if self ._sort_by :
188195 query = query .sort_by (self ._sort_by )
196+
197+ if self ._in_order :
198+ query = query .in_order ()
199+
189200 return query
190201
191202
@@ -208,13 +219,13 @@ def __init__(
208219 return_score : bool = True ,
209220 dialect : int = 2 ,
210221 sort_by : Optional [str ] = None ,
222+ in_order : bool = False ,
211223 ):
212- super ().__init__ (return_fields , num_results , dialect )
224+ super ().__init__ (return_fields , num_results , dialect , sort_by , in_order )
213225 self .set_filter (filter_expression )
214226 self ._vector = vector
215227 self ._field = vector_field_name
216228 self ._dtype = dtype .lower ()
217- self ._sort_by = sort_by
218229
219230 if return_score :
220231 self ._return_fields .append (self .DISTANCE_ID )
@@ -232,6 +243,7 @@ def __init__(
232243 return_score : bool = True ,
233244 dialect : int = 2 ,
234245 sort_by : Optional [str ] = None ,
246+ in_order : bool = False ,
235247 ):
236248 """A query for running a vector search along with an optional filter
237249 expression.
@@ -254,6 +266,9 @@ def __init__(
254266 Defaults to 2.
255267 sort_by (Optional[str]): The field to order the results by. Defaults
256268 to None. Results will be ordered by vector distance.
269+ in_order (bool): Requires the terms in the field to have
270+ the same order as the terms in the query filter, regardless of
271+ the offsets between them. Defaults to False.
257272
258273 Raises:
259274 TypeError: If filter_expression is not of type redisvl.query.FilterExpression
@@ -271,6 +286,7 @@ def __init__(
271286 return_score ,
272287 dialect ,
273288 sort_by ,
289+ in_order ,
274290 )
275291
276292 @property
@@ -291,6 +307,10 @@ def query(self) -> Query:
291307 query = query .sort_by (self ._sort_by )
292308 else :
293309 query = query .sort_by (self .DISTANCE_ID )
310+
311+ if self ._in_order :
312+ query = query .in_order ()
313+
294314 return query
295315
296316 @property
@@ -323,6 +343,7 @@ def __init__(
323343 return_score : bool = True ,
324344 dialect : int = 2 ,
325345 sort_by : Optional [str ] = None ,
346+ in_order : bool = False ,
326347 ):
327348 """A query for running a filtered vector search based on semantic
328349 distance threshold.
@@ -348,6 +369,10 @@ def __init__(
348369 Defaults to 2.
349370 sort_by (Optional[str]): The field to order the results by. Defaults
350371 to None. Results will be ordered by vector distance.
372+ in_order (bool): Requires the terms in the field to have
373+ the same order as the terms in the query filter, regardless of
374+ the offsets between them. Defaults to False.
375+
351376 Raises:
352377 TypeError: If filter_expression is not of type redisvl.query.FilterExpression
353378
@@ -365,6 +390,7 @@ def __init__(
365390 return_score ,
366391 dialect ,
367392 sort_by ,
393+ in_order ,
368394 )
369395 self .set_distance_threshold (distance_threshold )
370396
@@ -415,6 +441,10 @@ def query(self) -> Query:
415441 query = query .sort_by (self ._sort_by )
416442 else :
417443 query = query .sort_by (self .DISTANCE_ID )
444+
445+ if self ._in_order :
446+ query = query .in_order ()
447+
418448 return query
419449
420450 @property
0 commit comments