Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Router
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Managed Service for YDB
    • SpeechKit
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • Container Registry
    • Managed Service for Prometheus®
    • Message Queue
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Cloud Apps
    • Yandex AI Studio
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Yandex Cloud Video
    • Stackland
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • DataSphere
    • Vision OCR
    • Translate
    • Cloud Registry
    • SmartCaptcha
    • Cloud Desktop
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Managed Service for GitLab
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • IoT Core
    • Serverless Containers
    • Cloud Notification Service
    • Yandex Query
  • Статус работы сервисов
  • Marketplace
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
      • Создание кластера PostgreSQL для «1С:Предприятия»
      • Логическая репликация PostgreSQL
      • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
      • Миграция БД из Managed Service for PostgreSQL
      • Миграция кластера Managed Service for PostgreSQL на другую версию
      • Миграция БД из Managed Service for PostgreSQL в Object Storage
      • Миграция данных из Managed Service for PostgreSQL в Managed Service for MySQL® с помощью Data Transfer
      • Миграция данных из Managed Service for PostgreSQL в Managed Service for OpenSearch с помощью Data Transfer
      • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
      • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
      • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
      • Перенос данных из Object Storage в Managed Service for PostgreSQL с использованием Data Transfer
      • Захват изменений PostgreSQL и поставка в YDS
      • Решение проблем с сортировкой строк в PostgreSQL после обновления glibc
      • Использование секрета Yandex Lockbox в PySpark-задании для подключения к Yandex Managed Service for PostgreSQL
      • Настройка прав доступа к секрету, созданному Connection Manager, для пользователя Managed Service for PostgreSQL
      • Выполнение аналитических запросов в Managed Service for PostgreSQL с обработкой в Managed Service for ClickHouse®
      • Выполнение векторного поиска в Managed Service for PostgreSQL с помощью vector

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Подготовьте тестовые данные
  • Выполните поисковые запросы
  • Создайте индекс для ускорения поиска
  • HNSW
  • IVFFlat
  • Удалите созданные ресурсы
  1. Построение Data Platform
  2. PostgreSQL
  3. Выполнение векторного поиска в Managed Service for PostgreSQL с помощью vector

Выполнение векторного поиска в Yandex Managed Service for PostgreSQL с помощью vector

Статья создана
Yandex Cloud
Обновлена 15 октября 2026 г.
Открыть в Markdown
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте инфраструктуру
  • Подготовьте тестовые данные
  • Выполните поисковые запросы
  • Создайте индекс для ускорения поиска
    • HNSW
    • IVFFlat
  • Удалите созданные ресурсы

Вы можете хранить векторные данные и выполнять векторный поиск в Yandex Managed Service for PostgreSQL с помощью расширения vector.

Расширение поддерживает:

  • Точный и приблизительный поиск ближайших соседей.
  • Различные типы векторов: одинарной точности, половинной точности, бинарные и разреженные векторы.
  • Несколько метрик сравнения векторов: L2 (евклидово расстояние), косинусное расстояние, скалярное произведение, L1 (манхэттенское расстояние), расстояние Хэмминга и Жаккара.
  • Работу с любым языком программирования, который поддерживает подключение к PostgreSQL.

Векторный поиск можно комбинировать с привычными возможностями PostgreSQL и SQL.

По умолчанию в vector выполняется точный поиск, при котором сравниваются все векторы. Для больших объемов данных можно создавать векторные индексы и использовать приблизительный поиск. В этом случае поиск выполняется быстрее, но результаты могут быть менее точными.

В vector поддерживается два типа индексов:

  • HNSW — организует векторы в структуру данных, которая позволяет быстро переходить от одного похожего вектора к другому и находить ближайших соседей без проверки всей таблицы. В основе этой структуры лежит многослойный граф.
  • IVFFlat — разбивает все векторы на несколько групп (списков). Во время поиска проверяются не все группы, а только те, которые наиболее близки к искомому вектору. По сравнению с HNSW этот индекс строится быстрее и использует меньше памяти, но уступает по качеству и скорости поиска.

Расширение vector доступно в кластерах Managed Service for PostgreSQL версии 13 и выше. Подробнее о расширении vector читайте в его документации.

Чтобы выполнить векторный поиск в Managed Service for PostgreSQL:

  1. Подготовьте инфраструктуру.
  2. Подготовьте тестовые данные.
  3. Выполните поисковые запросы.
  4. Создайте индекс для ускорения поиска.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

  • Кластер Managed Service for PostgreSQL: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (тарифы Managed Service for PostgreSQL).
  • Публичные IP-адреса, если для хостов кластера включен публичный доступ (тарифы Yandex Virtual Private Cloud).

Подготовьте инфраструктуруПодготовьте инфраструктуру

  1. Создайте облачную сеть с именем demo-network.

    При создании сети автоматически создаются три подсети в разных зонах доступности.

  2. В сети demo-network создайте группу безопасности mpg-sg для кластера Managed Service for PostgreSQL и добавьте в группу правило для входящего трафика, которое разрешает подключение к кластеру через интернет:

    • Диапазон портов — 6432.
    • Протокол — TCP.
    • Назначение — Диапазон адресов.
    • IPv4 CIDR — 0.0.0.0/0.
  3. Создайте кластер Managed Service for PostgreSQL любой подходящей конфигурации со следующими настройками:

    • Версия — 13 или выше.

    • Сеть — demo-network.

    • Группа безопасности — mpg-sg.

    • База данных — pgdb.

    При создании кластера включите публичный доступ к хостам.

    Примечание

    Публичный доступ к хостам кластера нужен, если вы планируете подключаться к кластеру через интернет. Этот вариант подключения более простой, и его рекомендуется использовать для прохождения руководства. К хостам без публичного доступа тоже можно подключиться, но только с виртуальных машин Yandex Cloud, расположенных в той же облачной сети, что и кластер.

  4. В кластере Managed Service for PostgreSQL добавьте расширение vector в базу данных pgdb.

Подготовьте тестовые данныеПодготовьте тестовые данные

  1. Подключитесь к кластеру Managed Service for PostgreSQL.

  2. Создайте столбец-вектор размером 3:

    CREATE TABLE items (
      id bigserial PRIMARY KEY, 
      embedding vector(3)
    );
    
  3. Добавьте векторы:

    INSERT INTO items (embedding) 
    VALUES
    ('[1,2,3]'),
    ('[4,5,6]'),
    ('[7,8,9]'),
    ('[10,11,12]'),
    ('[13,14,15]'),
    ('[16,17,18]');
    

Выполните поисковые запросыВыполните поисковые запросы

  1. Найдите трех ближайших соседей на расстоянии L2:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Для получения расстояния в расширении vector используются следующие функции:

    • <-> — расстояние L2 (евклидово расстояние);
    • <#> — отрицательное скалярное произведение;
    • <=> — косинусное расстояние;
    • <+> — расстояние L1 (манхэттенское расстояние);
    • <~> — расстояние Хэмминга (для бинарных векторов);
    • <%> — расстояние Жаккара (для бинарных векторов).
  2. Найдите три строки, наиболее похожие на первую:

    SELECT *
    FROM items
    WHERE id != 1
    ORDER BY embedding <->
    (
    SELECT embedding
    FROM items
    WHERE id = 1
    )
    LIMIT 3;
    
  3. Найдите строки, находящиеся в пределах заданного расстояния:

    SELECT *
    FROM items
    WHERE embedding <-> '[3,1,2]' < 15;
    
  4. Получите расстояние, на котором находится каждый вектор от вектора [3,1,2]:

    SELECT embedding <-> '[3,1,2]'
    AS distance
    FROM items;
    
  5. Чтобы рассчитать скалярное произведение, умножьте результат на -1, т. к. оператор <#> возвращает отрицательное скалярное произведение:

    SELECT (embedding <#> '[3,1,2]') * -1 AS inner_product
    FROM items;
    
  6. Чтобы узнать, насколько каждый вектор похож на вектор [3,1,2] по косинусному сходству, используйте 1 - cosine distance:

    SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity
    FROM items;
    
  7. Найдите средний вектор:

    SELECT AVG(embedding)
    FROM items;
    

Создайте индекс для ускорения поискаСоздайте индекс для ускорения поиска

Создайте индекс каждого типа: HNSW и IVFFlat.

HNSWHNSW

  1. Создайте индекс HNSW для поиска по расстоянию L2:

    CREATE INDEX ON items
    USING hnsw (embedding vector_l2_ops)
    WITH (
    m = 16,
    ef_construction = 64
    );
    

    Где:

    • m — максимальное количество связей, которое может иметь вершина графа на каждом уровне. По умолчанию — 16.
    • ef_construction — количество кандидатов, рассматриваемых при построении графа. По умолчанию — 64. Чем выше значение, тем выше вероятность найти наиболее подходящие записи, но индекс строится дольше и операции вставки выполняются медленнее.

    Эти параметры задаются один раз при создании индекса. Чтобы изменить их значения, пересоздайте индекс.

    Для каждой функции расчета расстояния нужно создавать свой индекс HNSW. Подробнее в документации расширения vector.

  2. Настройте параметры поиска:

    SET hnsw.ef_search = 3;
    

    Где ef_search — количество векторов, которые алгоритм рассматривает во время поиска. По умолчанию — 40. Чем выше значение, тем выше вероятность найти наиболее похожие записи, но запрос будет выполняться медленнее.

    В отличие от параметров индекса m и ef_construction, параметр поиска ef_search можно изменять перед выполнением запросов.

  3. Выполните поиск ближайших соседей:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Если результаты поиска оказались недостаточно точными, увеличьте значение ef_search и повторите запрос.

IVFFlatIVFFlat

  1. Создайте индекс IVFFlat для поиска по расстоянию L2:

    CREATE INDEX ON items
    USING ivfflat (embedding vector_l2_ops)
    WITH (
    lists = 3
    );
    

    Где lists — количество групп (списков), на которые будут разделены векторы. Рекомендуемое значение зависит от объема данных. Чем больше групп, тем быстрее поиск, но качество поиска может снизиться.

    Этот параметр задается один раз при создании индекса. Чтобы изменить его значение, пересоздайте индекс.

    Для каждой функции расчета расстояния нужно создавать свой индекс IVFFlat. Подробнее в документации расширения vector.

  2. Настройте параметры поиска:

    SET ivfflat.probes = 1;
    

    Где probes — количество групп (списков), просматриваемых при выполнении поиска. По умолчанию используется 1. Чем больше значение, тем выше вероятность найти наиболее похожие записи, но ниже скорость выполнения запроса.

    В отличие от параметра индекса lists, параметр поиска probes можно изменять перед выполнением запросов.

  3. Выполните поиск ближайших соседей:

    SELECT *
    FROM items
    ORDER BY embedding <-> '[3,1,2]'
    LIMIT 3;
    

    Если результаты поиска оказались недостаточно точными, увеличьте значение probes и повторите запрос.

Удалите созданные ресурсыУдалите созданные ресурсы

Если не планируете больше использовать кластер Managed Service for PostgreSQL, удалите его, чтобы за него не списывалась плата.

Была ли статья полезна?

Предыдущая
Выполнение аналитических запросов в Managed Service for PostgreSQL с обработкой в Managed Service for ClickHouse®
Следующая
Миграция БД из стороннего кластера Valkey™ в Yandex Managed Service for Valkey™
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»