筛选

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,
)

注意

过滤器表达式通常不直接调用。它们是通过使用 & 和 | 运算符组合过滤器语句来构建的。

标签

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)

创建数字相等过滤器表达式。

from redisvl.query.filter import Num
f = Num("zipcode") == 90210

__ge__(other)

创建数字大于或等于过滤器表达式。

from redisvl.query.filter import Num

f = Num("age") >= 18

__gt__(other)

创建数字大于过滤器表达式。

from redisvl.query.filter import Num

f = Num("age") > 18

__le__(other)

创建数字小于或等于过滤器表达式。

from redisvl.query.filter import Num

f = Num("age") <= 18

__lt__(other)

创建数字小于过滤器表达式。

from redisvl.query.filter import Num

f = Num("age") < 18

__ne__(other)

创建数字不等过滤器表达式。

from redisvl.query.filter import Num

f = Num("zipcode") != 90210

__str__()

返回数字过滤器的 Redis 查询字符串

  • 返回类型: str

between(start, end, inclusive='both')

用于搜索两个数值之间值的运算符。

地理位置

class Geo(field)

Geo 是一个 FilterField,表示 Redis 索引中的地理位置(经/纬度)字段。

  • 参数: field (str)

__eq__(other)

在指定的 GeoRadius 内创建地理位置过滤器。

from redisvl.query.filter import Geo, GeoRadius

f = Geo("location") == GeoRadius(-122.4194, 37.7749, 1, unit="m")

__ne__(other)

在指定的 GeoRadius 之外创建地理位置过滤器。

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”之一。
评价此页面
返回顶部 ↑