筛选
FilterExpression
class FilterExpression(_filter=None, operator=None, left=None, right=None)
FilterExpression 是 RedisVL 中过滤器的逻辑组合。
可以使用 & 和 | 运算符组合 FilterExpressions 来创建复杂的表达式,这些表达式将被转换为 Redis 查询语言。
这提供了一个接口,用户无需了解 Redis 查询语言即可创建复杂查询。
from redisvl.query.filter import Tag, Num
brand_is_nike = Tag("brand") == "nike"
price_is_over_100 = Num("price") < 100
f = brand_is_nike & price_is_over_100
print(str(f))
>> (@brand:{nike} @price:[-inf (100)])
这可以与 VectorQuery 类结合使用来创建查询
from redisvl.query import VectorQuery
v = VectorQuery(
vector=[0.1, 0.1, 0.5, ...],
vector_field_name="product_embedding",
return_fields=["product_id", "brand", "price"],
filter_expression=f,
)
注意
过滤器表达式通常不直接调用。它们是通过使用 & 和 | 运算符组合过滤器语句来构建的。
- 参数
- _filter (str | None)
- operator (FilterOperator | None)
- left (FilterExpression | None)
- right (FilterExpression | None)
标签
class Tag(field)
标签过滤器可以应用于标签字段
- 参数: field (str)
__eq__(other)
创建标签相等过滤器表达式。
- 参数: other (Union [ List [ str ] , str ]) – 要过滤的标签。
- 返回类型: FilterExpression
from redisvl.query.filter import Tag
f = Tag("brand") == "nike"
__ne__(other)
创建标签不等过滤器表达式。
- 参数: other (Union [ List [ str ] , str ]) – 要过滤的标签。
- 返回类型: FilterExpression
from redisvl.query.filter import Tag
f = Tag("brand") != "nike"
__str__()
返回标签过滤器的 Redis 查询字符串
- 返回类型: str
文本
class Text(field)
Text 是一个 FilterField,表示 Redis 索引中的文本字段。
- 参数: field (str)
__eq__(other)
创建文本相等过滤器表达式。这些表达式产生的过滤器强制对提供的术语进行精确匹配。
- 参数: other (str) – 要过滤的文本值。
- 返回类型: FilterExpression
from redisvl.query.filter import Text
f = Text("job") == "engineer"
__mod__(other)
创建文本“LIKE”过滤器表达式。这是一个灵活的表达式,产生的过滤器可以使用各种附加运算符,如通配符 (*)、模糊匹配 (%%) 或提供的术语的组合 (|)。
- 参数: other (str) – 要过滤的文本值。
- 返回类型: FilterExpression
from redisvl.query.filter import Text
f = Text("job") % "engine*" # suffix wild card match
f = Text("job") % "%%engine%%" # fuzzy match w/ Levenshtein Distance
f = Text("job") % "engineer|doctor" # contains either term in field
f = Text("job") % "engineer doctor" # contains both terms in field
__ne__(other)
创建文本不等过滤器表达式。这些表达式产生的过滤器是提供的术语精确匹配的否定过滤器。与相等过滤器表达式相反。
- 参数: other (str) – 要过滤的文本值。
- 返回类型: FilterExpression
from redisvl.query.filter import Text
f = Text("job") != "engineer"
__str__()
返回文本过滤器的 Redis 查询字符串
- 返回类型: str
数字
class Num(field)
Num 是一个 FilterField,表示 Redis 索引中的数字字段。
- 参数: field (str)
__eq__(other)
创建数字相等过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("zipcode") == 90210
__ge__(other)
创建数字大于或等于过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("age") >= 18
__gt__(other)
创建数字大于过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("age") > 18
__le__(other)
创建数字小于或等于过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("age") <= 18
__lt__(other)
创建数字小于过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("age") < 18
__ne__(other)
创建数字不等过滤器表达式。
- 参数: other (int) – 要过滤的值。
- 返回类型: FilterExpression
from redisvl.query.filter import Num
f = Num("zipcode") != 90210
__str__()
返回数字过滤器的 Redis 查询字符串
- 返回类型: str
between(start, end, inclusive='both')
用于搜索两个数值之间值的运算符。
- 参数
- start (int)
- end (int)
- inclusive (str)
- 返回类型: FilterExpression
地理位置
class Geo(field)
Geo 是一个 FilterField,表示 Redis 索引中的地理位置(经/纬度)字段。
- 参数: field (str)
__eq__(other)
在指定的 GeoRadius 内创建地理位置过滤器。
- 参数: other (GeoRadius) – 要过滤的地理位置规范。
- 返回类型: FilterExpression
from redisvl.query.filter import Geo, GeoRadius
f = Geo("location") == GeoRadius(-122.4194, 37.7749, 1, unit="m")
__ne__(other)
在指定的 GeoRadius 之外创建地理位置过滤器。
- 参数: other (GeoRadius) – 要过滤的地理位置规范。
- 返回类型: FilterExpression
from redisvl.query.filter import Geo, GeoRadius
f = Geo("location") != GeoRadius(-122.4194, 37.7749, 1, unit="m")
__str__()
返回地理位置过滤器的 Redis 查询字符串
- 返回类型: str
GeoRadius
class GeoRadius(longitude, latitude, radius=1, unit='km')
GeoRadius 是表示地理半径的 GeoSpec。
创建 GeoRadius 规范 (GeoSpec)
- 参数
- longitude (float) – 半径中心的经度。
- latitude (float) – 半径中心的纬度。
- radius (int , optional) – 圆的半径。默认为 1。
- unit (str , optional) – 半径单位。默认为“km”。
- 抛出: ValueError – 如果单位不是“m”、“km”、“mi”或“ft”之一。
__init__(longitude, latitude, radius=1, unit='km')
创建 GeoRadius 规范 (GeoSpec)
- 参数
- longitude (float) – 半径中心的经度。
- latitude (float) – 半径中心的纬度。
- radius (int , optional) – 圆的半径。默认为 1。
- unit (str , optional) – 半径单位。默认为“km”。
- 抛出: ValueError – 如果单位不是“m”、“km”、“mi”或“ft”之一。