Поделиться через


Гибридный поиск в 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 на основе собственных данных.
  1. Включите функцию поиска векторов в Azure Cosmos DB для NoSQL.
  2. Включите функцию полнотекстового и гибридного поиска noSQL( предварительная версия).
  3. Создайте контейнер с векторной политикой, полнотекстовой политикой, векторным индексом и полнотекстовый индекс.
  4. Вставка данных с помощью свойств текста и вектора.
  5. Выполнение гибридных запросов к данным.

Внимание

В настоящее время политики векторов и векторные индексы неизменяемы после создания. Чтобы внести изменения, создайте новую коллекцию.

Пример политики векторов

{
   "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])