Фильтрация по метаданным (Metadata Filtering)

Фильтрация по метаданным — это практика прикрепления структурированных атрибутов (метаданных) — таких как дата, категория, ID пользователя, флаг статуса, цена — к каждому вектору, хранящемуся в векторной базе данных, и последующего ограничения поиска по сходству так, чтобы учитывались только векторы, чьи метаданные соответствуют заданным условиям фильтра, наряду с самим ранжированием по семантическому сходству. Она отвечает на паттерн запроса, с которым чистый поиск по векторному сходству справиться не может: «найди фрагменты, наиболее похожие на этот вопрос, но только из документов, опубликованных после 2025 года и помеченных `product: enterprise`». Почему это важно для разработчиков AI/SaaS: почти каждая реальная функция RAG или семантического поиска в этом нуждается. AI службы поддержки не должен показывать устаревшую статью, которая была заменена; многотенантное приложение никогда не должно возвращать данные другого клиента, независимо от того, насколько семантически похожими они кажутся; поиск на маркетплейсе должен сочетать «найти похожие товары» с «показать только те, что есть в наличии и дешевле $50». Векторное сходство само по себе не осведомлено ни об одном из этих ограничений бизнес-логики — оно знает только о смысле, а не о контроле доступа, актуальности или состоянии запасов, — поэтому фильтрация по метаданным является механизмом, который заново соединяет семантический поиск с реальными, структурированными ограничениями, которые действительно есть у каждого промышленного приложения. Как это работает: во время вставки/upsert каждый вектор хранится вместе с объектом метаданных (обычно JSON: `{"category": "billing", "published": true, "date": "2026-03-14", "tenant_id": "t_88"}`). Во время запроса приложение передаёт и вектор запроса, и выражение фильтра (синтаксис варьируется в зависимости от векторной базы данных — Pinecone использует синтаксис операторов в стиле Mongo, например `{"tenant_id": {"$eq": "t_88"}, "date": {"$gte": "2026-01-01"}}`; pgvector, будучи обычным Postgres, использует стандартные условия SQL `WHERE` наряду с `ORDER BY embedding <=> $1`). Некоторые векторные базы данных применяют фильтр до ANN-поиска (предварительная фильтрация, которая может быть медленнее, если фильтр очень избирателен и индексу приходится искать усерднее, чтобы найти достаточно совпадений в узком подмножестве), в то время как другие применяют его после (постфильтрация, которая может вернуть меньше результатов, чем `top_k`, если слишком много лучших совпадений отфильтровывается) — этот компромисс зависит от конкретной реализации и стоит проверить в документации конкретной базы данных, когда точность важна. Практический пример: AI-поиск кандидатов на SaaS-платформе для вакансий встраивает резюме и позволяет рекрутерам искать на естественном языке («старший бэкенд-инженер с опытом Kubernetes»), но рекрутер должен видеть только кандидатов, согласившихся быть доступными для поиска и находящихся в его регионе найма. Запрос сочетает векторное сходство с фильтром: `{"opted_in": true, "region": {"$in": ["EU", "UK"]}, "years_experience": {"$gte": 5}}` — гарантируя, что возвращаемые семантически лучшие совпадения также являются единственными, которых рекрутер юридически и по контракту имеет право видеть.

Похожие термины

Ещё термины: Данные и инфраструктура