元数据筛选
注意
适用于 Amazon Simple Storage Service 的 Amazon S3 Vectors 为预览版,可能会发生变化。
元数据筛选支持您根据附加到向量的特定属性来筛选查询结果。可以将元数据筛选条件与查询操作结合使用,来查找既符合相似性标准又满足特定元数据条件的向量。
S3 Vectors 支持两种类型的元数据:可筛选的元数据和不可筛选的元数据。关键区别在于,可筛选的元数据可以在查询筛选条件中使用,但具有更严格的大小限制;而不可筛选的元数据不能在筛选条件中使用,但可以在其大小限制内存储更大的数据量。有关元数据限制(包括每个向量的大小限制和每个向量的最大元数据键数)的更多信息,请参阅限制和局限性。
可筛选的元数据
可筛选的元数据支持您根据特定的元数据值来筛选查询结果。默认情况下,在相似性查询中所有元数据字段均为可筛选的,除非在创建向量索引时显式指定为不可筛选的。S3 Vectors 支持字符串、数字、布尔值和列表类型的元数据,每个向量都有大小限制。元数据类型非常适合要据以进行筛选的属性,例如类别、时间戳或状态值。
如果元数据大小超过支持的限制,PutVectors API 操作将返回 400 Bad Request
错误。有关每个向量的可筛选元数据大小限制的更多信息,请参阅限制和局限性。
以下操作可用于可筛选的元数据。
运算符 | 有效输入类型 | 描述 |
---|---|---|
$eq |
字符串、数字、布尔值 | 单个值的精确匹配比较。 与数组元数据值进行比较时,如果输入值与数组中的任何元素匹配,则返回 true。例如, |
$ne |
字符串、数字、布尔值 | “不等于”比较 |
$gt |
数字 | “大于”比较 |
$gte |
数字 | “大于或等于”比较 |
$lt |
数字 | “小于”比较 |
$lte |
数字 | “小于或等于”比较 |
$in |
基元的非空数组 | 匹配数组中的任何值 |
$nin |
基元的非空数组 | 不匹配数组中的任何值 |
$exists |
布尔值 | 检查字段是否存在 |
$and |
筛选条件的非空数组 | 多个条件的逻辑 AND |
$or |
筛选条件的非空数组 | 多个条件的逻辑 OR |
有效可筛选元数据示例
- 简单相等
-
{"genre": "documentary"}
此筛选条件匹配 genre 元数据键等于“documentary”的向量。当您未指定运算符时,S3 Vectors 会自动使用 $eq 运算符。
- 显式相等
-
// Example: Exact match {"genre": {"$eq": "documentary"}}
// Example: Not equal to {"genre": {"$ne": "drama"}}
- 数值比较
-
{"year": {"$gt": 2019}}
{"year": {"$gte": 2020}}
{"year": {"$lt": 2020}}
{"year": {"$lte": 2020}}
- 数组运算
-
{"genre": {"$in": ["comedy", "documentary"]}}
{"genre": {"$nin": ["comedy", "documentary"]}}
- 存在性检查
-
{"genre": {"$exists": true}}
$exists
筛选条件匹配具有“genre”元数据键的向量,而不考虑为该元数据键存储的值。 - 逻辑运算
-
{"$and": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
{"$or": [{"genre": {"$eq": "drama"}}, {"year": {"$gte": 2020}}]}
- 价格范围(同一字段有多个条件)
-
{"price": {"$gte": 10, "$lte": 50}}
有关如何使用元数据筛选来查询向量的更多信息,请参阅元数据筛选。
不可筛选的元数据
不可筛选的元数据不能在查询筛选条件中使用,但与可筛选元数据相比,可以存储更多的上下文数据。它非常适合存储大型文本分块、详细描述或其它上下文信息,这些信息不需要是可搜索的,但可以与查询结果一起返回。例如,可以将完整的文档文本、图片描述或详细的产品规格存储为不可筛选的元数据。
在创建向量索引期间,必须显式配置不可筛选的元数据键。一旦元数据键在创建索引期间被指定为不可筛选,以后就无法将其更改为可筛选。可以针对每个向量索引将多个元数据键配置为不可筛选,每个元数据键名称限制为 63 个字符。有关每个向量索引支持的最大不可筛选元数据键数量的更多信息,请参阅限制和局限性。
尽管无法对不可筛选的元数据进行筛选,但可以使用 return-metadata
参数将其与查询结果一起检索。对于某些使用案例,可以使用不可筛选的元数据,如下所示。
使用它可为应用程序提供上下文,而无需解析单独的数据来源。
存储超过可筛选元数据大小限制的较大文本分块。
使用 ListVectors API 操作将其包含在向量导出中。
有关配置不可筛选的元数据的更多信息,请参阅在向量存储桶中创建向量索引。