Код IT
← Каталог

Векторные базы данных — Управление метаданными

Фрагмент из «Векторные базы данных»: Управление метаданными.

Python main.py
from pymilvus import (
    connections, 
    Collection,
    DataType,
    FieldSchema,
    CollectionSchema
)

# Подключение к кластеру
connections.connect("default", host="localhost", port="19530")

# Определение схемы коллекции
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="категория", dtype=DataType.VARCHAR, max_length=100),
    FieldSchema(name="дата_создания", dtype=DataType.INT64),
    FieldSchema(name="язык", dtype=DataType.VARCHAR, max_length=10)
]

schema = CollectionSchema(fields, "коллекция_документов")
коллекция = Collection("документы", schema)

# Создание индекса для векторного поля
коллекция.create_index(
    field_name="vector",
    index_params={
        "index_type": "HNSW",
        "metric_type": "COSINE",
        "params": {"M": 16, "efConstruction": 200}
    }
)

# Поиск с фильтрацией по метаданным
результаты = коллекция.search(
    data=[[0.1, 0.2, 0.3, ...]],  # вектор запроса
    anns_field="vector",
    param={
        "metric_type": "COSINE",
        "params": {"ef": 50}
    },
    limit=10,
    expr='категория == "техническая_документация" && дата_создания >= 1704067200'
)
from pymilvus import (
    connections, 
    Collection,
    DataType,
    FieldSchema,
    CollectionSchema
)

# Подключение к кластеру
connections.connect("default", host="localhost", port="19530")

# Определение схемы коллекции
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="категория", dtype=DataType.VARCHAR, max_length=100),
    FieldSchema(name="дата_создания", dtype=DataType.INT64),
    FieldSchema(name="язык", dtype=DataType.VARCHAR, max_length=10)
]

schema = CollectionSchema(fields, "коллекция_документов")
коллекция = Collection("документы", schema)

# Создание индекса для векторного поля
коллекция.create_index(
    field_name="vector",
    index_params={
        "index_type": "HNSW",
        "metric_type": "COSINE",
        "params": {"M": 16, "efConstruction": 200}
    }
)

# Поиск с фильтрацией по метаданным
результаты = коллекция.search(
    data=[[0.1, 0.2, 0.3, ...]],  # вектор запроса
    anns_field="vector",
    param={
        "metric_type": "COSINE",
        "params": {"ef": 50}
    },
    limit=10,
    expr='категория == "техническая_документация" && дата_создания >= 1704067200'
)