content/develop/ai/redisvl/0.9.0/api/query.md
Query classes in RedisVL provide a structured way to define simple or complex
queries for different use cases. Each query class wraps the redis-py Query module
https://github.com/redis/redis-py/blob/master/redis/commands/search/query.py with extended functionality for ease-of-use.
class VectorQuery(vector, vector_field_name, return_fields=None, filter_expression=None, dtype='float32', num_results=10, return_score=True, dialect=2, sort_by=None, in_order=False, hybrid_policy=None, batch_size=None, ef_runtime=None, normalize_vector_distance=False)Bases: BaseVectorQuery, BaseQuery
A query for running a vector search along with an optional filter expression.
NOTELearn more about vector queries in Redis: https://redis.io/docs/interact/search-and-query/search/vectors/#knn-search
dialect(dialect)Add a dialect field to the query.
expander(expander)Add a expander field to the query.
in_order()Match only documents where the query terms appear in the same order in the document. i.e. for the query "hello world", we do not match "world hello"
language(language)Analyze the query as being in the specified language.
limit_fields(*fields)Limit the search to specific TEXT fields only.
from the defined schema.
limit_ids(*ids)Limit the results to a specific set of pre-known document ids of any length.
no_content()Set the query to only return ids and not the document content.
no_stopwords()Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords.
paging(offset, num)Set the paging for the query (defaults to 0..10).
query_string()Return the query string of this query only.
return_fields(*fields, skip_decode=None)Set the fields to return with search results.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
Since Redis 8.0 default was changed to BM25STD.
set_batch_size(batch_size)Set the batch size for the query.
set_ef_runtime(ef_runtime)Set the EF_RUNTIME parameter for the query.
set_filter(filter_expression=None)Set the filter expression for the query.
set_hybrid_policy(hybrid_policy)Set the hybrid policy for the query.
slop(slop)Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase).
sort_by(sort_spec=None, asc=True)Set the sort order for query results.
This method supports sorting by single or multiple fields. Note that Redis Search natively supports only a single SORTBY field. When multiple fields are specified, only the FIRST field is used for the Redis SORTBY clause.
Examples>> query.sort_by("price") # Single field, ascending
>> query.sort_by(("price", "DESC")) # Single field, descending
>> query.sort_by(["price", "rating"]) # Multiple fields (only first used)
>> query.sort_by([("price", "DESC"), ("rating", "ASC")])
NOTEWhen multiple fields are specified, only the first field is used for sorting in Redis. Future versions may support multi-field sorting through post-query sorting in Python.
timeout(timeout)overrides the timeout parameter of the module
verbatim()Set the query to be verbatim, i.e. use no query expansion or stemming.
with_payloads()Ask the engine to return document payloads.
with_scores()Ask the engine to return document search scores.
property batch_size: int | NoneReturn the batch size for the query.
property ef_runtime: int | NoneReturn the EF_RUNTIME parameter for the query.
property filter: str | [FilterExpression]({{< relref "filter/#filterexpression" >}}) The filter expression for the query.
property hybrid_policy: str | NoneReturn the hybrid policy for the query.
property params: Dict[str, Any]Return the parameters for the query.
property query: BaseQueryReturn self as the query object.
class VectorRangeQuery(vector, vector_field_name, return_fields=None, filter_expression=None, dtype='float32', distance_threshold=0.2, epsilon=None, num_results=10, return_score=True, dialect=2, sort_by=None, in_order=False, hybrid_policy=None, batch_size=None, normalize_vector_distance=False)Bases: BaseVectorQuery, BaseQuery
A query for running a filtered vector search based on semantic distance threshold.
NOTELearn more about vector range queries: https://redis.io/docs/interact/search-and-query/search/vectors/#range-query
dialect(dialect)Add a dialect field to the query.
expander(expander)Add a expander field to the query.
in_order()Match only documents where the query terms appear in the same order in the document. i.e. for the query "hello world", we do not match "world hello"
language(language)Analyze the query as being in the specified language.
limit_fields(*fields)Limit the search to specific TEXT fields only.
from the defined schema.
limit_ids(*ids)Limit the results to a specific set of pre-known document ids of any length.
no_content()Set the query to only return ids and not the document content.
no_stopwords()Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords.
paging(offset, num)Set the paging for the query (defaults to 0..10).
query_string()Return the query string of this query only.
return_fields(*fields, skip_decode=None)Set the fields to return with search results.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
Since Redis 8.0 default was changed to BM25STD.
set_batch_size(batch_size)Set the batch size for the query.
set_distance_threshold(distance_threshold)Set the distance threshold for the query.
set_epsilon(epsilon)Set the epsilon parameter for the range query.
set_filter(filter_expression=None)Set the filter expression for the query.
set_hybrid_policy(hybrid_policy)Set the hybrid policy for the query.
slop(slop)Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase).
sort_by(sort_spec=None, asc=True)Set the sort order for query results.
This method supports sorting by single or multiple fields. Note that Redis Search natively supports only a single SORTBY field. When multiple fields are specified, only the FIRST field is used for the Redis SORTBY clause.
Examples>> query.sort_by("price") # Single field, ascending
>> query.sort_by(("price", "DESC")) # Single field, descending
>> query.sort_by(["price", "rating"]) # Multiple fields (only first used)
>> query.sort_by([("price", "DESC"), ("rating", "ASC")])
NOTEWhen multiple fields are specified, only the first field is used for sorting in Redis. Future versions may support multi-field sorting through post-query sorting in Python.
timeout(timeout)overrides the timeout parameter of the module
verbatim()Set the query to be verbatim, i.e. use no query expansion or stemming.
with_payloads()Ask the engine to return document payloads.
with_scores()Ask the engine to return document search scores.
property batch_size: int | NoneReturn the batch size for the query.
property distance_threshold: floatReturn the distance threshold for the query.
property epsilon: float | NoneReturn the epsilon for the query.
property filter: str | [FilterExpression]({{< relref "filter/#filterexpression" >}}) The filter expression for the query.
property hybrid_policy: str | NoneReturn the hybrid policy for the query.
property params: Dict[str, Any]Return the parameters for the query.
property query: BaseQueryReturn self as the query object.
class HybridQuery(text, text_field_name, vector, vector_field_name, text_scorer='BM25STD', filter_expression=None, alpha=0.7, dtype='float32', num_results=10, return_fields=None, stopwords='english', dialect=2)Bases: AggregationQuery
HybridQuery combines text and vector search in Redis. It allows you to perform a hybrid search using both text and vector similarity. It scores documents based on a weighted combination of text and vector similarity.
from redisvl.query import HybridQuery
from redisvl.index import SearchIndex
index = SearchIndex.from_yaml("path/to/index.yaml")
query = HybridQuery(
text="example text",
text_field_name="text_field",
vector=[0.1, 0.2, 0.3],
vector_field_name="vector_field",
text_scorer="BM25STD",
filter_expression=None,
alpha=0.7,
dtype="float32",
num_results=10,
return_fields=["field1", "field2"],
stopwords="english",
dialect=2,
)
results = index.query(query)
Instantiates a HybridQuery object.
add_scores()If set, includes the score as an ordinary field of the row.
apply(**kwexpr)Specify one or more projection expressions to add to each result
Parametersdialect(dialect)Add a dialect field to the aggregate command.
filter(expressions)Specify filter for post-query results using predicates relating to values in the result set.
Parametersgroup_by(fields, *reducers)Specify by which fields to group the aggregation.
Parameterslimit(offset, num)Sets the limit for the most recent group or query.
If no group has been defined yet (via group_by()) then this sets the limit for the initial pool of results from the query. Otherwise, this limits the number of items operated on from the previous group.
Setting a limit on the initial search results may be useful when attempting to execute an aggregation on a sample of a large data set.
ParametersExample of sorting the initial results:
AggregateRequest("@sale_amount:[10000, inf]") .limit(0, 10) .group_by("@state", r.count())
Will only group by the states found in the first 10 results of the query @sale_amount:[10000, inf]. On the other hand,
AggregateRequest("@sale_amount:[10000, inf]") .limit(0, 1000) .group_by("@state", r.count() .limit(0, 10)
Will group all the results matching the query, but only return the first 10 groups.
If you only wish to return a top-N style query, consider using sort_by() instead.
load(*fields)Indicate the fields to be returned in the response. These fields are returned in addition to any others implicitly specified.
ParametersOtherwise, fields should be given in the format of @field.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
sort_by(*fields, **kwargs)Indicate how the results should be sorted. This can also be used for top-N style queries
ParametersExample of sorting by foo ascending and bar descending:
sort_by(Asc("@foo"), Desc("@bar"))
Return the top 10 customers:
AggregateRequest() .group_by("@customer", r.sum("@paid").alias(FIELDNAME)) .sort_by(Desc("@paid"), max=10)
with_schema()If set, the schema property will contain a list of [field, type] entries in the result object.
property params: Dict[str, Any]Return the parameters for the aggregation.
property stopwords: Set[str]Return the stopwords used in the query. :returns: The stopwords used in the query. :rtype: Set[str]
class TextQuery(text, text_field_name, text_scorer='BM25STD', filter_expression=None, return_fields=None, num_results=10, return_score=True, dialect=2, sort_by=None, in_order=False, params=None, stopwords='english')Bases: BaseQuery
TextQuery is a query for running a full text search, along with an optional filter expression.
from redisvl.query import TextQuery
from redisvl.index import SearchIndex
index = SearchIndex.from_yaml(index.yaml)
query = TextQuery(
text="example text",
text_field_name="text_field",
text_scorer="BM25STD",
filter_expression=None,
num_results=10,
return_fields=["field1", "field2"],
stopwords="english",
dialect=2,
)
results = index.query(query)
A query for running a full text search, along with an optional filter expression.
dialect(dialect)Add a dialect field to the query.
expander(expander)Add a expander field to the query.
in_order()Match only documents where the query terms appear in the same order in the document. i.e. for the query "hello world", we do not match "world hello"
language(language)Analyze the query as being in the specified language.
limit_fields(*fields)Limit the search to specific TEXT fields only.
from the defined schema.
limit_ids(*ids)Limit the results to a specific set of pre-known document ids of any length.
no_content()Set the query to only return ids and not the document content.
no_stopwords()Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords.
paging(offset, num)Set the paging for the query (defaults to 0..10).
query_string()Return the query string of this query only.
return_fields(*fields, skip_decode=None)Set the fields to return with search results.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
Since Redis 8.0 default was changed to BM25STD.
set_field_weights(field_weights)Set or update the field weights for the query.
set_filter(filter_expression=None)Set the filter expression for the query.
slop(slop)Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase).
sort_by(sort_spec=None, asc=True)Set the sort order for query results.
This method supports sorting by single or multiple fields. Note that Redis Search natively supports only a single SORTBY field. When multiple fields are specified, only the FIRST field is used for the Redis SORTBY clause.
Examples>> query.sort_by("price") # Single field, ascending
>> query.sort_by(("price", "DESC")) # Single field, descending
>> query.sort_by(["price", "rating"]) # Multiple fields (only first used)
>> query.sort_by([("price", "DESC"), ("rating", "ASC")])
NOTEWhen multiple fields are specified, only the first field is used for sorting in Redis. Future versions may support multi-field sorting through post-query sorting in Python.
timeout(timeout)overrides the timeout parameter of the module
verbatim()Set the query to be verbatim, i.e. use no query expansion or stemming.
with_payloads()Ask the engine to return document payloads.
with_scores()Ask the engine to return document search scores.
property field_weights: Dict[str, float]Get the field weights for the query.
property filter: str | [FilterExpression]({{< relref "filter/#filterexpression" >}}) The filter expression for the query.
property params: Dict[str, Any]Return the query parameters.
property query: BaseQueryReturn self as the query object.
property text_field_name: str | Dict[str, float]Get the text field name(s) - for backward compatibility.
class FilterQuery(filter_expression=None, return_fields=None, num_results=10, dialect=2, sort_by=None, in_order=False, params=None)Bases: BaseQuery
A query for running a filtered search with a filter expression.
dialect(dialect)Add a dialect field to the query.
expander(expander)Add a expander field to the query.
in_order()Match only documents where the query terms appear in the same order in the document. i.e. for the query "hello world", we do not match "world hello"
language(language)Analyze the query as being in the specified language.
limit_fields(*fields)Limit the search to specific TEXT fields only.
from the defined schema.
limit_ids(*ids)Limit the results to a specific set of pre-known document ids of any length.
no_content()Set the query to only return ids and not the document content.
no_stopwords()Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords.
paging(offset, num)Set the paging for the query (defaults to 0..10).
query_string()Return the query string of this query only.
return_fields(*fields, skip_decode=None)Set the fields to return with search results.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
Since Redis 8.0 default was changed to BM25STD.
set_filter(filter_expression=None)Set the filter expression for the query.
slop(slop)Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase).
sort_by(sort_spec=None, asc=True)Set the sort order for query results.
This method supports sorting by single or multiple fields. Note that Redis Search natively supports only a single SORTBY field. When multiple fields are specified, only the FIRST field is used for the Redis SORTBY clause.
Examples>> query.sort_by("price") # Single field, ascending
>> query.sort_by(("price", "DESC")) # Single field, descending
>> query.sort_by(["price", "rating"]) # Multiple fields (only first used)
>> query.sort_by([("price", "DESC"), ("rating", "ASC")])
NOTEWhen multiple fields are specified, only the first field is used for sorting in Redis. Future versions may support multi-field sorting through post-query sorting in Python.
timeout(timeout)overrides the timeout parameter of the module
verbatim()Set the query to be verbatim, i.e. use no query expansion or stemming.
with_payloads()Ask the engine to return document payloads.
with_scores()Ask the engine to return document search scores.
property filter: str | [FilterExpression]({{< relref "filter/#filterexpression" >}}) The filter expression for the query.
property params: Dict[str, Any]Return the query parameters.
property query: BaseQueryReturn self as the query object.
class CountQuery(filter_expression=None, dialect=2, params=None)Bases: BaseQuery
A query for a simple count operation provided some filter expression.
from redisvl.query import CountQuery
from redisvl.query.filter import Tag
t = Tag("brand") == "Nike"
query = CountQuery(filter_expression=t)
count = index.query(query)
dialect(dialect)Add a dialect field to the query.
expander(expander)Add a expander field to the query.
in_order()Match only documents where the query terms appear in the same order in the document. i.e. for the query "hello world", we do not match "world hello"
language(language)Analyze the query as being in the specified language.
limit_fields(*fields)Limit the search to specific TEXT fields only.
from the defined schema.
limit_ids(*ids)Limit the results to a specific set of pre-known document ids of any length.
no_content()Set the query to only return ids and not the document content.
no_stopwords()Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords.
paging(offset, num)Set the paging for the query (defaults to 0..10).
query_string()Return the query string of this query only.
return_fields(*fields, skip_decode=None)Set the fields to return with search results.
scorer(scorer)Use a different scoring function to evaluate document relevance. Default is TFIDF.
Since Redis 8.0 default was changed to BM25STD.
set_filter(filter_expression=None)Set the filter expression for the query.
slop(slop)Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase).
sort_by(sort_spec=None, asc=True)Set the sort order for query results.
This method supports sorting by single or multiple fields. Note that Redis Search natively supports only a single SORTBY field. When multiple fields are specified, only the FIRST field is used for the Redis SORTBY clause.
Examples>> query.sort_by("price") # Single field, ascending
>> query.sort_by(("price", "DESC")) # Single field, descending
>> query.sort_by(["price", "rating"]) # Multiple fields (only first used)
>> query.sort_by([("price", "DESC"), ("rating", "ASC")])
NOTEWhen multiple fields are specified, only the first field is used for sorting in Redis. Future versions may support multi-field sorting through post-query sorting in Python.
timeout(timeout)overrides the timeout parameter of the module
verbatim()Set the query to be verbatim, i.e. use no query expansion or stemming.
with_payloads()Ask the engine to return document payloads.
with_scores()Ask the engine to return document search scores.
property filter: str | [FilterExpression]({{< relref "filter/#filterexpression" >}}) The filter expression for the query.
property params: Dict[str, Any]Return the query parameters.
property query: BaseQueryReturn self as the query object.