模式
模式 API
RedisVL 中的模式提供了一种结构化格式,可以使用以下三个组件来定义索引设置和字段配置
组件 | 描述 |
---|---|
版本 | 模式规范的版本。当前支持的版本为 0.1.0。 |
索引 | 索引特定设置,例如名称、键前缀、键分隔符和存储类型。 |
字段 | 数据中要包含在索引中的字段子集以及任何自定义设置。 |
IndexSchema
class IndexSchema(*, index, fields={}, version='0.1.0')
Redis 中搜索索引的模式定义,用于 RedisVL 配置索引设置并组织向量和元数据字段。
该类提供从 YAML 文件或 Python 字典创建索引模式的方法,支持灵活的模式定义并轻松集成到各种工作流程中。
示例 schema.yaml 文件可能如下所示
version: '0.1.0'
index:
name: user-index
prefix: user
key_separator: ":"
storage_type: json
fields:
- name: user
type: tag
- name: credit_score
type: tag
- name: embedding
type: vector
attrs:
algorithm: flat
dims: 3
distance_metric: cosine
datatype: float32
从 yaml 加载 RedisVL 的模式就像这样简单
from redisvl.schema import IndexSchema
schema = IndexSchema.from_yaml("schema.yaml")
从字典加载 RedisVL 的模式就像这样简单
from redisvl.schema import IndexSchema
schema = IndexSchema.from_dict({
"index": {
"name": "user-index",
"prefix": "user",
"key_separator": ":",
"storage_type": "json",
},
"fields": [
{"name": "user", "type": "tag"},
{"name": "credit_score", "type": "tag"},
{
"name": "embedding",
"type": "vector",
"attrs": {
"algorithm": "flat",
"dims": 3,
"distance_metric": "cosine",
"datatype": "float32"
}
}
]
})
通过解析和验证来自关键字参数的输入数据来创建新模型。
如果输入数据无法解析为有效的模型,则会引发 ValidationError。
- 参数
- index (IndexInfo) –
- fields (Dict *[*str , BaseField ]) –
- version (str) –
add_field(field_inputs)
根据指定的字段类型和属性将单个字段添加到索引模式中。
此方法允许将单个字段添加到模式中,从而在定义索引结构方面提供灵活性。
- 参数: field_inputs (Dict *[*str , Any ]) – 要添加的字段。
- 引发: ValueError – 如果未提供字段名称或类型,或者名称已存在于模式中。
# Add a tag field
schema.add_field({"name": "user", "type": "tag})
# Add a vector field
schema.add_field({
"name": "user-embedding",
"type": "vector",
"attrs": {
"dims": 1024,
"algorithm": "flat",
"datatype": "float32"
}
})
add_fields(fields)
使用其他字段扩展模式。
此方法允许动态地将新字段添加到索引模式中。它处理字段定义列表。
- 参数: fields (List *[*Dict *[*str , Any ] ]) – 要添加的字段列表。
- 引发: ValueError – 如果模式中已存在具有相同名称的字段。
schema.add_fields([
{"name": "user", "type": "tag"},
{"name": "bio", "type": "text"},
{
"name": "user-embedding",
"type": "vector",
"attrs": {
"dims": 1024,
"algorithm": "flat",
"datatype": "float32"
}
}
])
classmethod from_dict(data)
从字典创建 IndexSchema。
- 参数: data (Dict *[*str , Any ]) – 索引模式数据。
- 返回值: 索引模式。
- 返回类型: IndexSchema
from redisvl.schema import IndexSchema
schema = IndexSchema.from_dict({
"index": {
"name": "docs-index",
"prefix": "docs",
"storage_type": "hash",
},
"fields": [
{
"name": "doc-id",
"type": "tag"
},
{
"name": "doc-embedding",
"type": "vector",
"attrs": {
"algorithm": "flat",
"dims": 1536
}
}
]
})
classmethod from_yaml(file_path)
从 YAML 文件创建 IndexSchema。
- 参数: file_path (str) – YAML 文件的路径。
- 返回值: 索引模式。
- 返回类型: IndexSchema
from redisvl.schema import IndexSchema
schema = IndexSchema.from_yaml("schema.yaml")
remove_field(field_name)
根据指定的名称从模式中删除字段。
此方法对于通过删除现有字段来动态地更改模式很有用。
- 参数: field_name (str) – 要删除的字段的名称。
to_dict()
将索引模式转换为字典。
- 返回值: 索引模式作为字典。
- 返回类型: Dict[str, Any]
to_yaml(file_path, overwrite=True)
将索引模式写入 YAML 文件。
- 参数
- file_path (str) – YAML 文件的路径。
- overwrite (bool) – 如果文件已存在,是否覆盖它。
- 引发: FileExistsError – 如果文件已存在并且 overwrite 为 False。
- 返回类型: None
property field_names : List[str]
与索引模式关联的字段名称列表。
- 返回值: 模式中的字段名称列表。
- 返回类型: List[str]
fields : Dict[str, BaseField]
与搜索索引关联的字段及其属性
index : IndexInfo
基本索引配置的详细信息。
version : str
底层索引模式的版本。
定义字段
模式中的字段可以在 YAML 格式或 Python 字典中定义,指定名称、类型、可选路径以及用于自定义的属性。
YAML 示例:
- name: title
type: text
path: $.document.title
attrs:
weight: 1.0
no_stem: false
withsuffixtrie: true
Python 字典示例:
{
"name": "location",
"type": "geo",
"attrs": {
"sortable": true
}
}
支持的字段类型和属性
每个字段类型都支持特定属性,这些属性可以自定义其行为。以下是字段类型及其可用属性
文本字段属性:
- weight: 字段在结果计算中的重要性。
- no_stem: 在索引期间禁用词干提取。
- withsuffixtrie: 通过维护后缀树来优化查询。
- phonetic_matcher: 启用音似匹配。
- sortable: 允许在此字段上排序。
标签字段属性:
- separator: 用于将文本拆分为单个标签的字符。
- case_sensitive: 标签匹配中的大小写敏感性。
- withsuffixtrie: 用于查询的后缀树优化。
- sortable: 允许根据标签字段排序。
数值和地理字段属性:
- 数值和地理字段都支持 sortable 属性,允许在这些字段上排序。
通用向量字段属性:
- dims: 向量的维数。
- algorithm: 索引算法(flat 或 hnsw)。
- datatype: 向量的浮点数数据类型(float32 或 float64)。
- distance_metric: 用于衡量查询相关性的度量(COSINE、L2、IP)。
HNSW 向量字段特定属性:
- m: 每层每个节点的最大出边。
- ef_construction: 构建时最大边缘候选项。
- ef_runtime: 搜索时最大候选项。
- epsilon: 范围搜索边界因子。
- 注意
- 查看此处完全记录的 Redis 支持的字段和选项: FT.CREATE.