筛选

筛选 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,
)
注意
通常不会直接调用过滤表达式。相反,它们是通过使用 & 和 | 运算符组合过滤语句来构建的。

标签

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)

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

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

地理位置

class Geo(field)

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

  • 参数: 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__()

返回 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”之一。
RATE THIS PAGE
Back to top ↑