Partilhar via


Reescrever consultas com classificação semântica no Azure AI Search (Pré-visualização)

Nota

Esta funcionalidade está atualmente em pré-visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

A reescrita de consultas é o processo de transformar a consulta de um usuário em uma consulta mais eficaz, adicionando mais termos e refinando os resultados da pesquisa. O serviço de pesquisa envia a consulta de pesquisa (ou uma variação dela) para um modelo generativo que gera consultas alternativas.

A reconfiguração de consultas melhora os resultados da classificação semântica corrigindo erros de digitação ou ortografia nas consultas do usuário e expandindo as consultas com sinônimos.

A pesquisa com reconfiguração de consulta funciona assim:

  • A consulta do usuário é enviada através da search propriedade na solicitação.
  • O serviço de pesquisa envia a consulta de pesquisa (ou uma variação dela) para um modelo generativo que gera consultas alternativas.
  • O serviço de pesquisa usa a consulta original e as consultas reescritas para recuperar os resultados da pesquisa.

A reconfiguração de consultas é um recurso opcional. Sem reescrever a consulta, o serviço de pesquisa apenas usa a consulta original para recuperar os resultados da pesquisa.

Nota

As consultas reescritas podem não conter todos os termos exatos que a consulta original tinha. Isso pode afetar os resultados da pesquisa se a consulta for altamente específica e exigir correspondências exatas para identificadores exclusivos ou códigos de produto.

Pré-requisitos

  • Um serviço de pesquisa, nível Básico ou superior.

Nota

A reconfiguração de consultas está atualmente disponível nas regiões Norte da Europa e Sudeste Asiático.

Importante

O classificador semântico é atualmente necessário para a reescrita da consulta.

  • Um índice de pesquisa existente com uma configuração semântica e conteúdo rich text. Os exemplos neste guia usam os dados de exemplo hotels-sample-index para demonstrar a reconfiguração da consulta. Você pode usar seus próprios dados e índice para testar a reconfiguração da consulta.

  • Você precisa de um cliente Web que ofereça suporte a solicitações de API REST. Os exemplos neste guia foram testados com o Visual Studio Code com a extensão REST Client .

Gorjeta

O conteúdo que inclui explicações ou definições funciona melhor para a classificação semântica.

Fazer uma solicitação de pesquisa com regravações de consulta

Neste exemplo de API REST, usamos Documentos de Pesquisa para formular a solicitação. Para obter mais informações sobre as propriedades de solicitação e resposta, consulte a documentação de referência da API.

  1. Cole a seguinte solicitação em um cliente da Web como um modelo.

    POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
    {
        "search": "newer hotel near the water with a great restaurant",
        "semanticConfiguration":"en-semantic-config",
        "queryType":"semantic",
        "queryRewrites":"generative|count-5",
        "queryLanguage":"en-US",
        "debug":"queryRewrites",
        "top": 1
    }
    
    • Você substitui search-service-name pelo nome do serviço de pesquisa.

    • Você substitui hotels-sample-index pelo seu nome de índice se for diferente.

    • Definimos "pesquisa" para uma consulta de pesquisa de texto completo. A propriedade search é necessária para a reconfiguração da consulta, a menos que você especifique consultas vetoriais. Se você especificar consultas vetoriais, o texto "pesquisar" deverá corresponder à "text" "vectorQueries" propriedade do objeto. Sua cadeia de caracteres de pesquisa pode suportar a sintaxe simples ou a sintaxe Lucene completa.

    • Definimos "semanticConfiguration" para uma configuração semântica predefinida incorporada no seu índice.

    • Definimos "queryType" como "semântica". Precisamos definir "queryType" como "semantic" ou incluir uma propriedade "semanticQuery" não vazia na solicitação. A classificação semântica é necessária para a reescrita da consulta.

    • Definimos "queryRewrites" como "generative|count-5" para obter até cinco regravações de consulta. Você pode definir a contagem para qualquer valor entre 1 e 10.

    • Como solicitamos regravações de consulta definindo a propriedade "queryRewrites", devemos definir "queryLanguage" para o idioma de texto de pesquisa. O serviço de Pesquisa usa o mesmo idioma para as regravações da consulta. Neste exemplo, usamos "en-US". As localidades suportadas são: , , , , ar-EGid-IDbn-INca-EScs-CZda-DKde-DEbg-BGes-ESel-GRes-MXet-EEeu-ESfa-AEfi-FIar-SAfr-FRfr-CAga-IEgl-ESgu-INhe-ILhi-INar-MAhr-HRhr-BAhu-HUhy-AMis-ISit-ITms-MYms-BNnb-NOmr-INml-INlv-LVnl-BElt-LTko-KRkn-INnl-NLja-JPar-KWar-JOen-USsr-BApt-BRpt-PTro-ROpl-PLsk-SKsr-MEru-RUno-NOpa-INsl-SLen-INen-GBen-CAen-AU sr-RS, sv-SE, ta-IN, , th-THte-IN, tr-TR, uk-UA, ur-PK, vi-VNzh-CNzh-TW, , .

    • Definimos "debug" como "queryRewrites" para obter regravações da consulta na resposta.

      Gorjeta

      Definido "debug": "queryRewrites" apenas para fins de teste. Para um melhor desempenho, não use depuração na produção.

    • Definimos "top" como 1 para retornar apenas o resultado da pesquisa superior.

  2. Envie a solicitação para executar a consulta e retornar os resultados.

Em seguida, avaliamos os resultados da pesquisa com as regravações da consulta.

Avaliar a resposta

Aqui está um exemplo de uma resposta que inclui regravações de consulta:

"@search.debug": {
  "semantic": null,
  "queryRewrites": {
    "text": {
      "inputQuery": "newer hotel near the water with a great restaurant",
      "rewrites": [
        "new waterfront hotels with top-rated eateries",
        "new waterfront hotels with top-rated restaurants",
        "new waterfront hotels with excellent dining",
        "new waterfront hotels with top-rated dining",
        "new water-side hotels with top-rated restaurants"
      ]
    },
    "vectors": []
  }
},
"value": [
  {
    "@search.score": 58.992092,
    "@search.rerankerScore": 2.815633535385132,
    "HotelId": "18",
    "HotelName": "Ocean Water Resort & Spa",
    "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
    "Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
    "Category": "Luxury",
    "Tags": [
      "view",
      "pool",
      "restaurant"
    ],
    "ParkingIncluded": true,
    "LastRenovationDate": "2020-11-14T00:00:00Z",
    "Rating": 4.2,
    "Location": {
      "type": "Point",
      "coordinates": [
        -82.537735,
        27.943701
      ],
      "crs": {
        "type": "name",
        "properties": {
          "name": "EPSG:4326"
        }
      }
    },
    //... more properties redacted for brevity
  }
]

Aqui estão alguns pontos-chave a serem observados:

  • Como definimos a propriedade "debug" como "queryRewrites" para teste, a resposta inclui um @search.debug objeto com a consulta de entrada de texto e regravações de consulta.
  • Como definimos a propriedade "queryRewrites" como "generative|count-5", a resposta inclui até cinco regravações de consulta.
  • O "inputQuery" valor é a consulta enviada para o modelo generativo para reescrita de consulta. A consulta de entrada nem sempre é a mesma que a consulta do "search" usuário.

Aqui está um exemplo de uma resposta sem regravações de consulta.

"@search.debug": {
  "semantic": null,
  "queryRewrites": {
    "text": {
      "inputQuery": "",
      "rewrites": []
    },
    "vectors": []
  }
},
"value": [
  {
    "@search.score": 7.774868,
    "@search.rerankerScore": 2.815633535385132,
    "HotelId": "18",
    "HotelName": "Ocean Water Resort & Spa",
    "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
    "Description_fr": "Nouvel h\u00f4tel de luxe pour des vacances inoubliables. Vue sur la baie depuis chaque chambre, emplacement pr\u00e8s de la jet\u00e9e, piscine sur le toit, restaurant au bord de l'eau et plus encore.",
    "Category": "Luxury",
    "Tags": [
      "view",
      "pool",
      "restaurant"
    ],
    "ParkingIncluded": true,
    "LastRenovationDate": "2020-11-14T00:00:00Z",
    "Rating": 4.2,
    "Location": {
      "type": "Point",
      "coordinates": [
        -82.537735,
        27.943701
      ],
      "crs": {
        "type": "name",
        "properties": {
          "name": "EPSG:4326"
        }
      }
    },
    //... more properties redacted for brevity
  }
]

Consultas vetoriais com reescrita de consulta

Você pode incluir consultas vetoriais em sua solicitação de pesquisa para combinar a pesquisa por palavra-chave e a pesquisa vetorial em uma única solicitação e uma resposta unificada.

Aqui está um exemplo de uma consulta que inclui uma consulta vetorial com regravações de consulta. Modificamos um exemplo anterior para incluir uma consulta vetorial.

  • Adicionamos um objeto "vectorQueries" à solicitação. Este objeto inclui uma consulta vetorial com o "tipo" definido como "texto".
  • O valor "texto" é o mesmo que o valor "pesquisar". Esses valores devem ser idênticos para que a reconfiguração da consulta funcione.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-11-01-preview
{
    "search": "newer hotel near the water with a great restaurant",
    "vectorQueries": [
        {
            "kind": "text",
            "text": "newer hotel near the water with a great restaurant",
            "k": 50,
            "fields": "Description",
            "queryRewrites": "generative|count-3"
        }
    ],
    "semanticConfiguration":"en-semantic-config",
    "queryType":"semantic",
    "queryRewrites":"generative|count-5",
    "queryLanguage":"en-US",
    "top": 1
}

A resposta inclui regravações de consulta para a consulta de texto e a consulta vetorial.

Consulta de teste reescreve com depuração

Você deve testar as regravações da consulta para garantir que elas estejam funcionando conforme o esperado. Defina a "debug": "queryRewrites" propriedade em sua solicitação de consulta para que a consulta seja reescrita na resposta. A configuração "debug" é opcional para fins de teste. Para um melhor desempenho, não defina esta propriedade em produção.

Razões de resposta parcial

Você pode observar que a resposta de depuração (teste) inclui uma matriz vazia para as text.rewrites propriedades e vectors .

{
  "@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@search.debug": {
    "semantic": null,
    "queryRewrites": {
      "text": {
        "rewrites": []
      },
      "vectors": []
    }
  },
  "@search.semanticPartialResponseReason": "Transient",
  "@search.semanticQueryRewriteResultType": "OriginalQueryOnly",
  //... more properties redacted for brevity
}

No exemplo anterior:

  • A resposta inclui uma @search.semanticPartialResponseReason propriedade com um valor de "Transitório". Esta mensagem significa que pelo menos uma das consultas não foi concluída.
  • A resposta também inclui uma @search.semanticQueryRewriteResultType propriedade com um valor de "OriginalQueryOnly". Esta mensagem significa que as regravações da consulta não estão disponíveis. Somente a consulta original é usada para recuperar os resultados da pesquisa.

Próximos passos

A classificação semântica pode ser usada em consultas híbridas que combinam pesquisa de palavras-chave e pesquisa vetorial em uma única solicitação e uma resposta unificada.