Sdílet prostřednictvím


Přepsání dotazů pomocí sémantického rankeru ve službě Azure AI Search (Preview)

Poznámka:

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Přepsání dotazu 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 search vlastnosti 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řepsá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

  • Vyhledávací služba, úroveň Basic nebo vyšší.

Poznámka:

Přepsání dotazů je aktuálně dostupné v oblastech Severní Evropa a Jihovýchodní Asie.

Důležité

Pro přepis dotazů se v současné době vyžaduje sémantický ranker.

  • Existující index vyhledávání s sémantickou konfigurací a obsahem ve formátu RTF. Příklady v této příručce používají ukázková data ukázkového indexu hotelů k předvedení přepisu dotazů. K otestování přepisu dotazů můžete použít vlastní data a index.

  • Potřebujete webového klienta, který podporuje požadavky rozhraní REST API. Příklady v této příručce byly testovány pomocí editoru Visual Studio Code s rozšířením REST Client .

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žijeme k vytvoření požadavku vyhledávací dokumenty . Další informace o vlastnostech požadavku a odpovědi najdete v referenční dokumentaci k rozhraní API.

  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-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
    }
    
    • Nahradíte search-service-name názvem vyhledávací služby.

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

    • "Search" nastavíme 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.

    • SémanticConfiguration nastavíme na předdefinovanou sémantickou konfiguraci vloženou do indexu.

    • Vlastnost queryType nastavíme na sémantickou. Buď musíme nastavit "queryType" na "sémantic" nebo do požadavku zahrnout vlastnost nonempty "sémanticQuery". Pro přepis dotazů se vyžaduje sémantické řazení .

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

    • Vzhledem k tomu, že jsme požádali o přepsání dotazu nastavením vlastnosti "queryRewrites", musíme nastavit "queryLanguage" na hledaný textový jazyk. Search používá stejný jazyk pro přepsání dotazu. V tomto příkladu používáme "en-US". Mezi podporovaná národní prostředí patří: , , en-IN, he-ILbn-INbg-BGcs-CZca-ESda-DKde-DEel-GRes-ESes-MXar-SAeu-ESet-EEfa-AEfi-FIfr-CAfr-FRga-IEar-MAgu-INgl-EShi-INhr-BAhr-HRhu-HUhy-AMar-KWis-ISid-IDms-BNmr-INms-MYml-INlv-LVlt-LTnb-NOko-KRnl-BEkn-INnl-NLja-JPit-ITsr-BApl-PLpt-PTsl-SLsr-MEru-RUro-ROsk-SKpa-INpt-BRno-NOar-JOen-CAen-GBen-USar-EGen-AU sr-RS, sv-SE, , ta-IN, th-THte-IN, tr-TRvi-VNzh-CNuk-UAur-PK, . zh-TW

    • Nastavíme "debug" na "queryRewrites", abychom získali přepsání dotazu v odpovědi.

      Tip

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

    • Když nastavíme "top" na 1, vrátíme jenom nejlepší výsledek hledání.

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

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

Vyhodnocení odpovědi

Tady je příklad odpovědi, která obsahuje přepisy 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" pro testování nastavíme na "queryRewrites", odpověď obsahuje @search.debug objekt s textovým vstupním dotazem a přepsáním dotazu.
  • Vzhledem k tomu, že vlastnost queryRewrites nastavíme na hodnotu 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. Předchozí příklad upravíme tak, aby zahrnoval vektorový dotaz.

  • Do požadavku přidáme 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-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
}

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

Otestování přepsání dotazů pomocí ladění

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ěď ladění (test) obsahuje prázdné pole pro vlastnosti text.rewrites a vectors vlastnosti.

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

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řepsání dotazu není 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.