Гибридный поиск в Azure Cosmos DB для NoSQL (предварительная версия)
Azure Cosmos DB для NoSQL теперь поддерживает мощный гибридный поиск, который объединяет векторный поиск с оценкой полнотекстового поиска (BM25) с помощью функции RRF.
Примечание.
Полнотекстовый и гибридный поиск находится в ранней предварительной версии и может быть недоступен во всех регионах в настоящее время.
Что такое гибридный поиск?
Гибридный поиск использует преимущества методов поиска на основе векторов и традиционных методов поиска на основе ключевых слов, чтобы обеспечить более релевантные и точные результаты поиска. Гибридный поиск легко выполнять в Azure Cosmos DB для NoSQL из-за возможности хранения метаданных и векторов в одном документе.
Гибридный поиск в Azure Cosmos DB для NoSQL интегрирует два различных методологии поиска:
- Векторный поиск: использует модели машинного обучения для понимания семантического значения запросов и документов. Это позволяет получить более подробные и контекстные результаты поиска, особенно полезные для сложных запросов, где традиционный поиск ключевых слов может оказаться коротким.
- Полнотекстовый поиск (BM25): хорошо установленный алгоритм, который оценивает документы на основе присутствия и частоты слов и терминов. BM25 особенно эффективен для простого поиска ключевых слов, предоставляя надежные базовые показатели релевантности поиска.
Затем результаты векторного поиска и полнотекстового поиска объединяются с помощью функции RRF. RRF — это метод агрегирования ранжирования, который объединяет рейтинги из нескольких алгоритмов поиска для создания единого единого ранжирования. Это гарантирует, что конечные результаты поиска пользуются преимуществами обоих подходов к поиску и предлагают несколько преимуществ.
- Улучшенная релевантность: объединение семантического понимания с сопоставлением ключевых слов гибридный поиск обеспечивает более релевантные результаты для широкого спектра запросов.
- Улучшенная точность. Функция RRF гарантирует приоритет наиболее релевантных результатов обоих методов поиска.
- Универсальность. Подходит для различных вариантов использования, включая получение дополненного поколения (RAG) для улучшения ответов, созданных LLM на основе собственных данных.
Использование гибридного поиска
- Включите функцию поиска векторов в Azure Cosmos DB для NoSQL.
- Включите функцию полнотекстового и гибридного поиска noSQL( предварительная версия).
- Создайте контейнер с векторной политикой, полнотекстовой политикой, векторным индексом и полнотекстовый индекс.
- Вставка данных с помощью свойств текста и вектора.
- Выполнение гибридных запросов к данным.
Настройка политик и индексов для гибридного поиска
Внимание
В настоящее время политики векторов и векторные индексы неизменяемы после создания. Чтобы внести изменения, создайте новую коллекцию.
Пример политики векторов
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
Пример полнотекстовой политики
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
Пример политики индексирования с полнотекстовыми и векторными индексами
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
Гибридные поисковые запросы
Гибридные поисковые запросы можно выполнять, используя RRF
системную функцию в ORDER BY RANK
предложении, включающую как функцию, так VectorDistance
и FullTextScore
. Например, параметризованный запрос для поиска наиболее релевантных результатов верхнего k будет выглядеть следующим образом:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Предположим, у вас есть документ, содержащий векторные внедрения, хранящиеся в каждом документе в свойстве c.vector
и текстовых данных, содержащихся в свойстве c.text. Чтобы получить 10 наиболее релевантных документов с помощью гибридного поиска, запрос можно записать следующим образом:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])