Partilhar via


Indexação de texto completo e pesquisa no Cosmos DB no Fabric

O Cosmos DB em Fabric oferece uma poderosa funcionalidade de Pesquisa de Texto Completo conforme geralmente disponível. Esse recurso foi projetado para aprimorar os recursos de pesquisa nativos de seus aplicativos sem a necessidade de um serviço de pesquisa externo para pesquisa básica de texto completo.

O Cosmos DB in Fabric oferece indexação e pesquisa de texto completo, projetadas para aprimorar suas cargas de trabalho de pesquisa e recuperação. Este recurso inclui técnicas avançadas de processamento de texto, como derivação, remoção de palavras paradas e tokenização, permitindo pesquisas de texto eficientes e eficazes através de um índice de texto especializado. A pesquisa de texto completo também inclui pontuação de texto completo com uma função que avalia a relevância dos documentos para uma determinada consulta de pesquisa. BM25, ou Best Matching 25, considera fatores como frequência de termos, frequência de documentos inversos e comprimento do documento para pontuar e classificar documentos. Isso ajuda a garantir que os documentos mais relevantes apareçam na parte superior dos resultados da pesquisa, melhorando a precisão e a utilidade das pesquisas de texto.

A Pesquisa de Texto Completo é ideal para vários cenários, incluindo:

  • Comércio eletrônico: encontre rapidamente produtos com base em descrições, avaliações e outros atributos de texto.

  • Gerenciamento de conteúdo: pesquise com eficiência artigos, blogs e documentos.

  • Suporte ao cliente: recupere tíquetes de suporte relevantes, perguntas frequentes e artigos da base de dados de conhecimento.

  • Conteúdo do usuário: analise e pesquise o conteúdo gerado pelo usuário, como postagens e comentários.

  • RAG para chatbots: melhore as respostas do chatbot recuperando informações relevantes de corpora de texto grande, melhorando a precisão e a relevância das respostas.

  • Aplicativos de IA multiagente: permita que vários agentes de IA pesquisem e analisem de forma colaborativa grandes quantidades de dados de texto, fornecendo insights abrangentes e matizados.

  1. Configure um contêiner com uma política de texto completo e um índice de texto completo.

  2. Insira seus dados com propriedades de texto.

  3. Execute consultas nos dados usando funções do sistema de pesquisa de texto completo.

Para usar os recursos de pesquisa de texto completo, você deve primeiro definir duas políticas:

  • Uma política de texto completo no nível do contêiner que define quais caminhos contêm texto para as novas funções do sistema de consulta de texto completo.

  • Um índice de texto completo adicionado à política de indexação que permite uma pesquisa eficiente.

Você pode executar consultas de pesquisa de texto completo sem essas políticas, mas elas não usam o índice de texto completo e podem consumir mais unidades de solicitação (RUs). Sem essa política, as pesquisas de texto completo também podem levar mais tempo para serem executadas. Recomenda-se a definição de políticas de contêiner e índice de texto completo.

Política de texto integral

Para cada propriedade de texto que pretenda configurar para pesquisa de texto completo, deve declarar tanto o path da propriedade com texto como o language do texto. Uma política de texto completo simples pode ser:

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

A definição de vários caminhos de texto é feita facilmente adicionando outro elemento à fullTextPolicy matriz:

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

Importante

No momento, os caracteres curinga (*, []) não são suportados na política de texto completo ou no índice de texto completo.

Para obter mais informações e exemplos de configurações de uma política de texto completo, consulte Exemplos de política de indexação de texto completo.

Suporte multi-idioma

O suporte multilíngüe permite indexar e pesquisar texto em idiomas além do inglês. Ele aplica tokenização, derivação e remoção de stopword específicas do idioma para resultados de pesquisa mais precisos.

Observação

O suporte multilinguagem está em versão preliminar. O desempenho e a qualidade da pesquisa podem ser diferentes da pesquisa de texto completo em inglês. Por exemplo, a remoção de palavras paradas só está disponível para inglês (en-us) no momento. A funcionalidade está sujeita a alterações através da evolução da pré-visualização.

Para mais informações sobre limitações relacionadas com o suporte multi-língua, consulte limitações do texto completo do Cosmos DB.

Índice de texto completo

Qualquer operação de pesquisa de texto completo deve utilizar um índice de texto completo. Um índice de texto completo pode ser facilmente definido em qualquer política de índice do Cosmos DB no Fabric de acordo com o exemplo aqui:

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

Tal como acontece com as políticas de texto completo, os índices de texto completo podem ser definidos em vários caminhos:

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

Consultas de pesquisa de texto completo

As operações de pesquisa e pontuação de texto completo são executadas usando as seguintes funções do sistema no Cosmos DB na linguagem de consulta Fabric:

  • FULLTEXTCONTAINS: Retorna true se uma determinada cadeia de caracteres estiver contida na propriedade especificada de um documento. Essa função é útil em uma WHERE cláusula quando você deseja garantir que palavras-chave específicas sejam incluídas nos documentos retornados pela sua consulta.

  • FULLTEXTCONTAINSALL: Retorna true se todas as cadeias de caracteres fornecidas estiverem contidas na propriedade especificada de um documento. Essa função é útil em uma WHERE cláusula quando você deseja garantir que várias palavras-chave sejam incluídas nos documentos retornados pela consulta.

  • FULLTEXTCONTAINSANY: Retorna true se qualquer uma das cadeias de caracteres fornecidas estiver contida na propriedade especificada de um documento. Essa função é útil em uma WHERE cláusula quando você deseja garantir que pelo menos uma das palavras-chave seja incluída nos documentos retornados pela sua consulta.

  • FULLTEXTSCORE: Use esta função em uma ORDER BY RANK cláusula para retornar documentos ordenados por sua pontuação de texto completo, colocando os documentos mais relevantes (maior pontuação) na parte superior e os menos relevantes (menor pontuação) na parte inferior.

Aqui estão alguns exemplos de cada função em uso.

FULLTEXTCONTAINS

Neste exemplo, queremos obter os primeiros 10 resultados onde a frase "bicicleta vermelha" está contida na propriedade c.text.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red bicycle")

FULLTEXTCONTAINSALL

Neste exemplo, queremos obter os primeiros 10 resultados onde as palavras-chave "vermelho" e "bicicleta" estão contidas na propriedade c.text, mas não necessariamente juntas.

SELECT TOP 10 *
FROM c
WHERE FULLTEXTCONTAINSALL(c.text, "red", "bicycle")

FULLTEXTCONTAINSANY

Neste exemplo, queremos obter os primeiros 10 resultados onde as palavras-chave "vermelho" e, ou "bicicleta" ou "skateboard", estão contidas na propriedade c.text.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red") AND 
  FULLTEXTCONTAINSANY(c.text, "bicycle", "skateboard")

FULLTEXTSCORE

Neste exemplo, queremos obter os primeiros 10 resultados onde "montanha" e "bicicleta" estão incluídos, e classificados por ordem de relevância. Ou seja, documentos que possuem esses termos com mais frequência devem aparecer mais acima na lista.

SELECT TOP 10
  *
FROM
  container c
ORDER BY RANK
  FULLTEXTSCORE(c.text, "bicycle", "mountain")

Importante

FULLTEXTSCORE só pode ser usado na ORDER BY RANK cláusula e não projetado na instrução SELECT ou na cláusula WHERE.

A pesquisa difusa pode melhorar a resiliência a erros de digitação e variações de texto. Você pode especificar uma "distância" permitida (número de edições) entre o termo de pesquisa e o texto do documento, permitindo que as correspondências próximas sejam consideradas um acerto. A distância máxima que pode ser especificada é 2 (duas edições).

Observação

A pesquisa difusa está em pré-visualização. O desempenho, a qualidade e a funcionalidade estão sujeitos a alterações através da evolução da pré-visualização.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})