Partilhar via


Pesquisa híbrida no Azure Cosmos DB para NoSQL (visualização)

O Azure Cosmos DB para NoSQL agora oferece suporte a um poderoso recurso de pesquisa híbrida que combina a Pesquisa Vetorial com a pontuação da Pesquisa de Texto Completo (BM25) usando a função RRF (Reciprocal Rank Fusion).

Nota

A Pesquisa Híbrida de Texto Completo está em pré-visualização antecipada e pode não estar disponível em todas as regiões no momento.

A pesquisa híbrida aproveita os pontos fortes dos métodos de pesquisa baseados em vetores e tradicionais baseados em palavras-chave para fornecer resultados de pesquisa mais relevantes e precisos. A pesquisa híbrida é fácil de fazer no Azure Cosmos DB para NoSQL devido à capacidade de armazenar metadados e vetores no mesmo documento.

A pesquisa híbrida no Azure Cosmos DB for NoSQL integra duas metodologias de pesquisa distintas:

  • Pesquisa vetorial: Utiliza modelos de aprendizado de máquina para entender o significado semântico de consultas e documentos. Isso permite resultados de pesquisa mais matizados e sensíveis ao contexto, especialmente úteis para consultas complexas em que a pesquisa tradicional por palavra-chave pode ficar aquém.
  • Pesquisa de texto completo (BM25): Um algoritmo bem estabelecido que pontua documentos com base na presença e frequência de palavras e termos. O BM25 é particularmente eficaz para pesquisas diretas de palavras-chave, fornecendo uma linha de base robusta para a relevância da pesquisa.

Os resultados da pesquisa vetorial e da pesquisa de texto completo são então combinados usando a função Reciprocal Rank Fusion (RRF). RRF é um método de agregação de classificação que funde as classificações de vários algoritmos de pesquisa para produzir uma classificação única e unificada. Isso garante que os resultados finais da pesquisa se beneficiem dos pontos fortes de ambas as abordagens de pesquisa e ofereça vários benefícios.

  • Relevância aprimorada: Ao combinar compreensão semântica com correspondência de palavras-chave, a pesquisa híbrida oferece resultados mais relevantes para uma ampla gama de consultas.
  • Precisão melhorada: A função RRF garante que os resultados mais pertinentes de ambos os métodos de pesquisa sejam priorizados.
  • Versatilidade: Adequado para vários casos de uso, incluindo Geração Aumentada de Recuperação (RAG) para melhorar as respostas geradas por um LLM baseado em seus próprios dados.
  1. Habilite o recurso Pesquisa vetorial no Azure Cosmos DB para NoSQL.
  2. Habilite o recurso de visualização de Pesquisa Híbrida de Texto Completo para NoSQL.
  3. Crie um contêiner com uma política de vetor, política de texto completo, índice de vetor e índice de texto completo.
  4. Insira seus dados com texto e propriedades vetoriais.
  5. Execute consultas híbridas nos dados.

Importante

Atualmente, as políticas vetoriais e os índices vetoriais são imutáveis após a criação. Para fazer alterações, crie uma nova coleção.

Uma política de vetor de exemplo

{
   "vectorEmbeddings": [
       {
           "path":"/vector",
           "dataType":"float32",
           "distanceFunction":"cosine",
           "dimensions":3
       },

}

Um exemplo de política de texto completo

{
    "defaultLanguage": "en-US",
    "fullTextPaths": [
        {
            "path": "/text",
            "language": "en-US"
        }
    ]
}

Um exemplo de política de indexação com texto completo e índices vetoriais

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/vector/*"
        }
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector",
            "type": "DiskANN"
        }
    ]
}

Consultas de pesquisa híbridas

As consultas de pesquisa híbridas podem ser executadas aproveitando a função do RRF sistema em uma ORDER BY RANK cláusula que inclui uma VectorDistance função e FullTextScore. Por exemplo, uma consulta parametrizada para encontrar os resultados k mais relevantes seria semelhante a:

SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))

Suponha que você tenha um documento que tenha incorporações vetoriais armazenadas em cada documento na propriedade c.vector e nos dados de texto contidos na propriedade c.text. Para obter os 10 documentos mais relevantes usando a pesquisa híbrida, a consulta pode ser escrita como:

SELECT TOP 10 * 
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])