筛选
筛选 API
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)
文本是表示 Redis 索引中文本字段的 FilterField。
- 参数: 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 是表示 Redis 索引中数字字段的 FilterField。
- 参数: 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
地理位置
class Geo(field)
Geo 是表示 Redis 索引中地理位置(经度/纬度)字段的 FilterField。
- 参数: 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__()
返回 Geo 过滤器的 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”之一。