Delen via


Query's herschrijven met een semantische ranker in Azure AI Search (preview)

Notitie

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt aangeboden zonder service level agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Het herschrijven van query's is het proces van het transformeren van de query van een gebruiker in een effectievere query, het toevoegen van meer termen en het verfijnen van zoekresultaten. De zoekservice verzendt de zoekquery (of een variatie ervan) naar een generatief model waarmee alternatieve query's worden gegenereerd.

Het herschrijven van query's verbetert de resultaten van semantische classificatie door typfouten of spelfouten in gebruikersquery's te corrigeren en query's uit te breiden met synoniemen.

Zoeken met het herschrijven van query's werkt als volgt:

  • De gebruikersquery wordt verzonden via de search eigenschap in de aanvraag.
  • De zoekservice verzendt de zoekquery (of een variatie ervan) naar een generatief model waarmee alternatieve query's worden gegenereerd.
  • De zoekservice maakt gebruik van de oorspronkelijke query en de herschreven query's om zoekresultaten op te halen.

Het herschrijven van query's is een optionele functie. Zonder query's opnieuw te schrijven, gebruikt de zoekservice alleen de oorspronkelijke query om zoekresultaten op te halen.

Notitie

De herschreven query's bevatten mogelijk niet alle exacte termen die de oorspronkelijke query had. Dit kan van invloed zijn op zoekresultaten als de query zeer specifiek was en exacte overeenkomsten vereist voor unieke id's of productcodes.

Vereisten

  • Een zoekservice, Basic-laag of hoger.

Notitie

Het herschrijven van query's is momenteel beschikbaar in de regio's Europa - noord en Azië - zuidoost.

Belangrijk

Semantische rangschikking is momenteel vereist voor het herschrijven van query's.

  • Een bestaande zoekindex met een semantische configuratie en inhoud voor tekst met opmaak. In de voorbeelden in deze handleiding worden de voorbeeldgegevens van hotels-sample-index gebruikt om het herschrijven van query's te demonstreren. U kunt uw eigen gegevens en index gebruiken om het herschrijven van query's te testen.

  • U hebt een webclient nodig die REST API-aanvragen ondersteunt. De voorbeelden in deze handleiding zijn getest met Visual Studio Code met de REST Client-extensie .

Tip

Inhoud met uitleg of definities werkt het beste voor semantische rangschikking.

Een zoekaanvraag maken met herschrijfbewerkingen voor query's

In dit REST API-voorbeeld gebruiken we Zoekdocumenten om de aanvraag te formuleren. Zie de API-referentiedocumentatie voor meer informatie over de eigenschappen van aanvragen en antwoorden.

  1. Plak de volgende aanvraag in een webclient als sjabloon.

    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
    }
    
    • U vervangt door search-service-name de naam van uw zoekservice.

    • U vervangt door hotels-sample-index uw indexnaam als deze anders is.

    • We stellen 'zoeken' in op een zoekopdracht in volledige tekst. De zoekeigenschap is vereist voor het herschrijven van query's, tenzij u vectorquery's opgeeft. Als u vectorquery's opgeeft, moet de zoektekst overeenkomen met de "text" eigenschap van het "vectorQueries" object. Uw zoekreeks kan de eenvoudige syntaxis of volledige Lucene-syntaxis ondersteunen.

    • We stellen 'semanticConfiguration' in op een vooraf gedefinieerde semantische configuratie die is ingesloten in uw index.

    • We stellen 'queryType' in op 'semantisch'. We moeten 'queryType' instellen op 'semantisch' of een nonempty 'semanticQuery'-eigenschap opnemen in de aanvraag. Semantische classificatie is vereist voor het herschrijven van query's.

    • We stellen 'queryRewrites' in op 'generatief|count-5' om maximaal vijf herschrijfbewerkingen voor query's op te halen. U kunt het aantal instellen op elke waarde tussen 1 en 10.

    • Omdat we het herschrijven van query's hebben aangevraagd door de eigenschap queryRewrites in te stellen, moeten we queryLanguage instellen op de taal voor zoektekst. De Search-service gebruikt dezelfde taal voor het herschrijven van de query. In dit voorbeeld gebruiken we 'en-US'. De ondersteunde landinstellingen zijn: en-AU, en-CA, en-GB, en-IN, en-USar-EGar-JOar-KWar-MAar-SAbg-BGbn-INca-EScs-CZda-DKde-DEel-GRes-ESes-MXet-EEeu-ESfa-AEfi-FIfr-CAfr-FRga-IEgl-ESgu-INhe-ILhi-INhr-BAhr-HRhu-HUhy-AMid-IDis-ISit-ITja-JPkn-INko-KRlt-LTlv-LVml-INmr-INms-BNms-MYnb-NOnl-BEnl-NLno-NOpa-INpl-PLpt-BRpt-PTro-ROru-RUsk-SKsl-SLsr-BAsr-ME sr-RS, , ta-IN, te-INsv-SE, , th-TH, tr-TR, , uk-UAur-PK, vi-VN, . zh-CNzh-TW

    • We stellen 'foutopsporing' in op 'queryRewrites' om de query opnieuw te schrijven in het antwoord.

      Tip

      Alleen ingesteld "debug": "queryRewrites" voor testdoeleinden. Gebruik voor betere prestaties geen foutopsporing in productie.

    • We stellen 'top' in op 1 om alleen het bovenste zoekresultaat te retourneren.

  2. Verzend de aanvraag om de query uit te voeren en retourneer resultaten.

Vervolgens evalueren we de zoekresultaten met het herschrijven van de query.

Het antwoord evalueren

Hier volgt een voorbeeld van een antwoord dat query's herschrijft:

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

Hier volgen enkele belangrijke punten die u moet noteren:

  • Omdat we de eigenschap 'foutopsporing' instellen op queryRewrites om te testen, bevat het antwoord een @search.debug object met de tekstinvoerquery en het herschrijven van query's.
  • Omdat we de eigenschap 'queryRewrites' instellen op 'generatief|count-5', bevat het antwoord maximaal vijf herschrijven van query's.
  • De "inputQuery" waarde is de query die wordt verzonden naar het generatieve model voor het herschrijven van query's. De invoerquery is niet altijd hetzelfde als de query van "search" de gebruiker.

Hier volgt een voorbeeld van een antwoord zonder query opnieuw te schrijven.

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

Vectorquery's met het herschrijven van query's

U kunt vectorquery's opnemen in uw zoekaanvraag om trefwoordzoekopdrachten en vectorzoekopdrachten te combineren in één aanvraag en een uniform antwoord.

Hier volgt een voorbeeld van een query met een vectorquery met herschrijven van query's. We wijzigen een vorig voorbeeld om een vectorquery op te nemen.

  • We voegen een vectorQueries-object toe aan de aanvraag. Dit object bevat een vectorquery met de 'soort' ingesteld op 'tekst'.
  • De waarde 'tekst' is hetzelfde als de zoekwaarde. Deze waarden moeten identiek zijn voor het herschrijven van query's.
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
}

Het antwoord bevat queryherschrijvingen voor zowel de tekstquery als de vectorquery.

Query's opnieuw schrijven met foutopsporing

U moet de herschrijven van uw query testen om ervoor te zorgen dat ze werken zoals verwacht. Stel de "debug": "queryRewrites" eigenschap in uw queryaanvraag in om de query opnieuw te schrijven in het antwoord. Instelling "debug" is optioneel voor testdoeleinden. Voor betere prestaties moet u deze eigenschap niet instellen in productie.

Redenen voor gedeeltelijke reacties

U ziet mogelijk dat het antwoord voor foutopsporing (test) een lege matrix bevat voor de text.rewrites en vectors eigenschappen.

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

In het voorgaande voorbeeld:

  • Het antwoord bevat een @search.semanticPartialResponseReason eigenschap met de waarde 'Tijdelijk'. Dit bericht betekent dat ten minste één van de query's niet kan worden voltooid.
  • Het antwoord bevat ook een @search.semanticQueryRewriteResultType eigenschap met de waarde OriginalQueryOnly. Dit bericht betekent dat de query opnieuw wordt geschreven, niet beschikbaar is. Alleen de oorspronkelijke query wordt gebruikt om zoekresultaten op te halen.

Volgende stappen

Semantische classificatie kan worden gebruikt in hybride query's die trefwoordzoekopdrachten en vectorzoekopdrachten combineren in één aanvraag en een uniform antwoord.