Dela via


Skriv om frågor med semantisk rankning i Azure AI Search (förhandsversion)

Kommentar

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Frågeomskrivning är processen att omvandla en användares fråga till en mer effektiv fråga, lägga till fler termer och förfina sökresultat. Söktjänsten skickar sökfrågan (eller en variant av den) till en generativ modell som genererar alternativa frågor.

Omskrivning av frågor förbättrar resultatet från semantisk rangordning genom att korrigera stavfel eller stavfel i användarfrågor och expandera frågor med synonymer.

Sökning med frågeomskrivning fungerar så här:

  • Användarfrågan skickas via egenskapen search i begäran.
  • Söktjänsten skickar sökfrågan (eller en variant av den) till en generativ modell som genererar alternativa frågor.
  • Söktjänsten använder den ursprungliga frågan och de omskrivna frågorna för att hämta sökresultat.

Frågeomskrivning är en valfri funktion. Utan frågeskrivning använder söktjänsten bara den ursprungliga frågan för att hämta sökresultat.

Kommentar

De omskrivna frågorna kanske inte innehåller alla exakta termer som den ursprungliga frågan hade. Detta kan påverka sökresultaten om frågan var mycket specifik och krävde exakta matchningar för unika identifierare eller produktkoder.

Förutsättningar

  • En söktjänst, Basic-nivå eller högre.

Kommentar

Frågeomskrivning är för närvarande tillgängligt i regionerna Europa, norra och Sydostasien.

Viktigt!

Semantisk rankning krävs för närvarande för omskrivning av frågor.

  • Ett befintligt sökindex med en semantisk konfiguration och RTF-innehåll. Exemplen i den här guiden använder exempeldata för hotels-sample-index för att demonstrera omskrivning av frågor. Du kan använda dina egna data och index för att testa omskrivning av frågor.

  • Du behöver en webbklient som stöder REST API-begäranden. Exemplen i den här guiden har testats med Visual Studio Code med REST-klienttillägget .

Dricks

Innehåll som innehåller förklaringar eller definitioner fungerar bäst för semantisk rangordning.

Skapa en sökbegäran med frågeomskrivningar

I det här REST API-exemplet använder vi sökdokument för att formulera begäran. Mer information om egenskaperna för begäran och svar finns i API-referensdokumentationen.

  1. Klistra in följande begäran i en webbklient som en mall.

    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
    }
    
    • Du ersätter search-service-name med söktjänstens namn.

    • Du ersätter hotels-sample-index med ditt indexnamn om det är annorlunda.

    • Vi ställer in "sök" på en fulltextsökningsfråga. Sökegenskapen krävs för omskrivning av frågor, såvida du inte anger vektorfrågor. Om du anger vektorfrågor måste texten "sök" matcha "text" objektets "vectorQueries" egenskap. Söksträngen kan antingen ha stöd för den enkla syntaxen eller den fullständiga Lucene-syntaxen.

    • Vi anger "semanticConfiguration" till en fördefinierad semantisk konfiguration inbäddad i ditt index.

    • Vi anger "queryType" till "semantisk". Vi måste antingen ange "queryType" till "semantisk" eller inkludera en icke-ymplig "semanticQuery"-egenskap i begäran. Semantisk rangordning krävs för omskrivning av frågor.

    • Vi ställer in "queryRewrites" på "generative|count-5" för att få upp till fem frågeomskrivningar. Du kan ange antalet till valfritt värde mellan 1 och 10.

    • Eftersom vi begärde frågeomskrivningar genom att ange egenskapen "queryRewrites" måste vi ange "queryLanguage" till söktextspråket. Tjänsten Search använder samma språk för frågeomskrivningarna. I det här exemplet använder vi "en-US". De språk som stöds är: en-AU, en-CA, en-GB, en-IN, en-US, ar-EGhi-INda-DKde-DEes-ESel-GRcs-CZca-ESet-EEhr-BAgu-INga-IEbg-BGfr-CAfi-FIeu-ESes-MXfa-AEhe-ILar-KWar-SAar-JOar-MAbn-INgl-ESfr-FR, , kn-INja-JPit-ITko-KRis-ISid-IDhy-AMlt-LThr-HRpt-BRpl-PLhu-HUms-MYnb-NOmr-INms-BNnl-BEml-INno-NOnl-NLro-ROpt-PTpa-INlv-LV, ru-RUsk-SK, sl-SL, , sr-BA, , sr-ME sr-RS, sv-SE, ta-IN, te-IN, th-TH, tr-TR, uk-UA, ur-PK, , vi-VN, zh-CN, zh-TW.

    • Vi ställer in "felsökning" på "queryRewrites" för att hämta frågeomskrivningarna i svaret.

      Dricks

      Anges "debug": "queryRewrites" endast i testsyfte. Använd inte felsökning i produktion för bättre prestanda.

    • Vi anger "topp" till 1 för att endast returnera det översta sökresultatet.

  2. Skicka begäran för att köra frågan och returnera resultat.

Därefter utvärderar vi sökresultaten med frågeomskrivningarna.

Utvärdera svaret

Här är ett exempel på ett svar som innehåller frågeomskrivningar:

"@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
  }
]

Här följer några viktiga punkter att tänka på:

  • Eftersom vi anger egenskapen "debug" till "queryRewrites" för testning innehåller svaret ett @search.debug objekt med textinmatningsfrågan och frågeomskrivningar.
  • Eftersom vi anger egenskapen "queryRewrites" till "generative|count-5" innehåller svaret upp till fem frågeomskrivningar.
  • Värdet "inputQuery" är frågan som skickas till den generativa modellen för frågeomskrivning. Indatafrågan är inte alltid densamma som användarens "search" fråga.

Här är ett exempel på ett svar utan frågeomskrivningar.

"@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
  }
]

Vektorfrågor med frågeomskrivning

Du kan inkludera vektorfrågor i din sökbegäran för att kombinera nyckelordssökning och vektorsökning till en enda begäran och ett enhetligt svar.

Här är ett exempel på en fråga som innehåller en vektorfråga med frågeomskrivningar. Vi ändrar ett tidigare exempel så att det innehåller en vektorfråga.

  • Vi lägger till ett "vectorQueries"-objekt i begäran. Det här objektet innehåller en vektorfråga med "typ" inställt på "text".
  • Värdet "text" är samma som "sök"-värdet. Dessa värden måste vara identiska för att frågeskrivningen ska fungera.
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
}

Svaret innehåller frågeomskrivningar för både textfrågan och vektorfrågan.

Testa frågeomskrivningar med felsökning

Du bör testa frågeomskrivningarna för att säkerställa att de fungerar som förväntat. "debug": "queryRewrites" Ange egenskapen i frågebegäran för att hämta frågeomskrivningarna i svaret. Inställningen "debug" är valfri i testsyfte. För bättre prestanda ska du inte ange den här egenskapen i produktion.

Partiella svarsorsaker

Du kan observera att svaret för felsökning (test) innehåller en tom matris för text.rewrites egenskaperna och 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
}

I exemplet ovan händer följande:

  • Svaret innehåller en @search.semanticPartialResponseReason egenskap med värdet "Transient". Det här meddelandet innebär att minst en av frågorna inte kunde slutföras.
  • Svaret innehåller också en @search.semanticQueryRewriteResultType egenskap med värdet "OriginalQueryOnly". Det här meddelandet innebär att frågeomskrivningarna inte är tillgängliga. Endast den ursprungliga frågan används för att hämta sökresultat.

Nästa steg

Semantisk rangordning kan användas i hybridfrågor som kombinerar nyckelordssökning och vektorsökning i en enda begäran och ett enhetligt svar.