Přepsání dotazů pomocí sémantického rankeru v Azure AI Vyhledávač (Preview)

Poznámka

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Important

Na funkce, možnosti nebo vlastnosti označené jako (Preview) se nevztahuje smlouva o úrovni služeb, nejsou doporučené pro produkční úlohy a mohou se změnit nebo být omezeny dříve, než budou obecně k dispozici. Podmínky Azure AI Vyhledávač Preview platí pro všechny funkce ve verzi Preview, ať už jsou samostatné nebo součástí obecně dostupné funkce.

Přepsání dotazu (Preview) je proces transformace dotazu uživatele na efektivnější, přidání dalších termínů a upřesnění výsledků hledání. Vyhledávací služba odešle vyhledávací dotaz (nebo jeho variantu) do generujícího modelu, který generuje alternativní dotazy.

Přepsání dotazů zlepšuje výsledky z sémantického řazení tím, že opravuje překlepy nebo pravopisné chyby v uživatelských dotazech a rozšiřuje dotazy pomocí synonym.

Vyhledávání s přepisem dotazů funguje takto:

  • Dotaz uživatele se odešle prostřednictvím vlastnosti search v požadavku.
  • Vyhledávací služba odešle vyhledávací dotaz (nebo jeho variantu) do generujícího modelu, který generuje alternativní dotazy.
  • Vyhledávací služba používá původní dotaz a přepsané dotazy k načtení výsledků hledání.

Přepisování dotazů je volitelná funkce. Bez přepsání dotazu vyhledávací služba pouze používá původní dotaz k načtení výsledků hledání.

Poznámka

Přepsané dotazy nemusí obsahovat všechny přesné termíny, které původní dotaz měl. To může mít vliv na výsledky hledání, pokud byl dotaz vysoce specifický a vyžadoval přesné shody pro jedinečné identifikátory nebo kódy produktů.

Požadavky

Tip

Obsah obsahující vysvětlení nebo definice fungují nejlépe pro sémantické řazení.

Vytvoření požadavku hledání s přepsáním dotazu

V tomto příkladu rozhraní REST API použijte k formulaci požadavku pomocí Vyhledání dokumentů (náhled).

  1. Vložte následující požadavek do webového klienta jako šablonu.

    POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-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
    }
    
    • Nahraďte search-service-name názvem vyhledávací služby.

    • Pokud se liší, nahraďte hotels-sample názvem indexu.

    • Nastavte "search" na fulltextový vyhledávací dotaz. Vlastnost vyhledávání se vyžaduje pro přepsání dotazu, pokud nezadáte vektorové dotazy. Pokud zadáte vektorové dotazy, text "search" musí odpovídat "text" vlastnosti objektu "vectorQueries" . Hledaný řetězec může podporovat jednoduchou syntaxi nebo úplnou syntaxi Lucene.

    • Nastavte "semanticConfiguration" na předdefinovanou semantickou konfiguraci vloženou do indexu.

    • Nastavte "queryType" na "sémantic". Buď je potřeba nastavit "queryType" na "semantic", nebo zahrnout vlastnost "semanticQuery", která nezůstane prázdná, do požadavku. Pro přepis dotazů se vyžaduje sémantické řazení.

    • Nastavte "queryRewrites" na "generative|count-5", pokud chcete získat až pět přepisů dotazů. Počet můžete nastavit na libovolnou hodnotu mezi 1 a 10.

    • Vzhledem k tomu, že jste požádali o přepsání dotazu nastavením vlastnosti "queryRewrites", musíte nastavit "queryLanguage" na hledaný textový jazyk. Vyhledávací služba používá stejný jazyk pro přepsání dotazu. V tomto příkladu použijete "en-US". Mezi podporovaná národní prostředí patří: en-AU, en-CA, en-GB, en-IN, en-US, ar-EG, ar-JO, ar-KW, ar-MA, ar-SA, bg-BG, bn-IN, ca-ES, cs-CZ, da-DK, de-DE, el-GR, es-ES, es-MX, et-EE, eu-ES, fa-AE, fi-FI, fr-CA, fr-FR, ga-IE, gl-ES, gu-IN, he-IL, hi-IN, hr-BA, hr-HR, hu-HU, hy-AM, id-ID, is-IS, it-IT, ja-JP, kn-IN, ko-KR, lt-LT, lv-LV, ml-IN, mr-IN, ms-BN, ms-MY, nb-NO, nl-BE, nl-NL, no-NO, pa-IN, pl-PL, pt-BR, pt-PT, ro-RO, ru-RU, sk-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.

    • Pokud chcete získat přepsání dotazu v odpovědi, nastavte "debug" na "queryRewrites".

      Tip

      Nastavte "debug": "queryRewrites" pouze pro účely testování. Pro lepší výkon nepoužívejte ladění v produkčním prostředí.

    • Pokud chcete vrátit jenom nejlepší výsledek hledání, nastavte hodnotu "top" na 1.

  2. Odešlete žádost o provedení dotazu a vrátí výsledky.

V dalším kroku vyhodnotíte výsledky hledání přepsáním dotazu.

Vyhodnocení odpovědi

Tady je příklad odpovědi, která obsahuje přepracování dotazů:

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

Tady je několik klíčových bodů, které je potřeba poznamenat:

  • Vzhledem k tomu, že vlastnost "debug" nastavíte na "queryRewrites" pro testování, odpověď obsahuje @search.debug objekt s textovým vstupním dotazem a přepsáním dotazu.
  • Protože vlastnost queryRewrites nastavíte na generative|count-5, odpověď obsahuje až pět přepisů dotazů.
  • Hodnota "inputQuery" je dotaz odeslaný do generujícího modelu pro přepisování dotazů. Vstupní dotaz není vždy stejný jako dotaz uživatele "search" .

Tady je příklad odpovědi bez přepsání dotazu.

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

Vektorové dotazy s přepsáním dotazu

Do požadavku hledání můžete zahrnout vektorové dotazy, které kombinují hledání klíčových slov a vektorové vyhledávání do jednoho požadavku a jednotné odpovědi.

Tady je příklad dotazu, který obsahuje vektorový dotaz s přepsáním dotazu. Upravte předchozí příklad tak, aby zahrnoval vektorový dotaz.

  • Přidejte do požadavku objekt vectorQueries. Tento objekt obsahuje vektorový dotaz s typem nastaveným na text.
  • Hodnota "text" je stejná jako hodnota "search". Tyto hodnoty musí být identické, aby přepisování dotazů fungovalo.
POST https://[search-service-name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-08-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
}

Odpověď zahrnuje přepsání dotazu pro textový dotaz i vektorový dotaz.

Otestujte přepsání dotazů pomocí ladicího režimu

Měli byste otestovat přepsání dotazu, abyste měli jistotu, že fungují podle očekávání. "debug": "queryRewrites" Nastavte vlastnost v požadavku dotazu, aby se dotaz v odpovědi přepsal. Nastavení "debug" je volitelné pro účely testování. Pro lepší výkon nenastavujte tuto vlastnost v produkčním prostředí.

Částečné důvody odpovědi

Můžete si všimnout, že odpověď z ladění (testování) obsahuje prázdné pole pro vlastnosti text.rewrites a vectors.

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

V předchozím příkladu:

  • Odpověď obsahuje @search.semanticPartialResponseReason vlastnost s hodnotou "Přechodné". Tato zpráva znamená, že se alespoň jeden z dotazů nepodařilo dokončit.
  • Odpověď také obsahuje @search.semanticQueryRewriteResultType vlastnost s hodnotou OriginalQueryOnly. Tato zpráva znamená, že přepisy dotazu nejsou k dispozici. K načtení výsledků hledání se používá pouze původní dotaz.

Další kroky

Sémantické řazení lze použít v hybridních dotazech, které kombinují vyhledávání klíčových slov a vektorové vyhledávání do jednoho požadavku a jednotné odpovědi.