模式

模式 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"
            }
        }
    ]
})
注意
模式中的 fields 属性必须包含唯一的字段名称,以确保正确且无歧义的字段引用。

通过解析和验证来自关键字参数的输入数据来创建新模型。

如果输入数据无法解析为有效的模型,则会引发 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.
RATE THIS PAGE
Back to top ↑