Azure Yapay Zeka Arama'de semantik derecele sorguları yeniden yazma (önizleme)

Not

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Important

(önizleme) olarak işaretlenen özellikler, özellikler veya özellikler hizmet düzeyi sözleşmesi kapsamında değildir, üretim iş yükleri için önerilmez ve genel kullanıma sunulmadan önce değişebilir veya kısıtlanabilir. Azure Yapay Zeka Arama önizleme terimleri, tek başına veya genel kullanıma sunulan bir özelliğin parçası olsun, tüm önizleme işlevleri için geçerlidir.

Sorgu yeniden yazma (önizleme), kullanıcının sorgusunu daha etkili bir sorguya dönüştürme, daha fazla terim ekleme ve arama sonuçlarını iyileştirme işlemidir. Arama hizmeti, arama sorgusunu (veya bir çeşitlemini) alternatif sorgular üreten bir modele gönderir.

Sorgu yeniden yazma, kullanıcı sorgularındaki yazım hatalarını veya yazım hatalarını düzelterek ve eş anlamlılarla sorguları genişleterek anlamsal derecelendirmeden elde edilen sonuçları geliştirir.

Sorgu yeniden yazma ile arama şu şekilde çalışır:

  • Kullanıcı sorgusu, istekteki search özelliği aracılığıyla gönderilir.
  • Arama hizmeti, arama sorgusunu (veya bir çeşitlemini) alternatif sorgular üreten bir modele gönderir.
  • Arama hizmeti, arama sonuçlarını almak için özgün sorguyu ve yeniden yazılan sorguları kullanır.

Sorgu yeniden yazma isteğe bağlı bir özelliktir. Sorgu yeniden yazma olmadan, arama hizmeti arama sonuçlarını almak için yalnızca özgün sorguyu kullanır.

Not

Yeniden yazılan sorgular, özgün sorgunun sahip olduğu tüm terimleri içermeyebilir. Sorgu son derece özelse ve benzersiz tanımlayıcılar veya ürün kodları için tam eşleşmeler gerekiyorsa bu durum arama sonuçlarını etkileyebilir.

Önkoşullar

Ipucu

Açıklama veya tanım içeren içerik, anlam derecelendirmesi için en iyi sonucu sağlar.

Sorgu düzenlemeleri ile arama isteği yapın.

Bu REST API örneğinde, isteği formüle etmek için Belge Ara (önizleme) kullanın.

  1. Aşağıdaki isteği bir web istemcisine şablon olarak yapıştırın.

    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
    }
    
    • Arama hizmetinizin adıyla search-service-name değerini değiştirin.

    • Eğer dizin adınız farklıysa hotels-sample ile değiştirin.

    • "Arama"yı tam metin arama sorgusu olarak ayarlayın. Vektör sorguları belirtmediğiniz sürece, sorgu yeniden yazma işlemi için arama özelliği gereklidir. Vektör sorguları belirtirseniz, "arama" metni nesnenin özelliğiyle "text" eşleşmelidir"vectorQueries". Arama dizeniz basit söz dizimini veya tam Lucene söz dizimini destekleyebilir.

    • "semanticConfiguration" öğesini dizininize eklenmiş önceden tanımlanmış bir semantik yapılandırma olarak ayarlayın.

    • "queryType" değerini "semantik" olarak ayarlayın. "queryType" değerini "semantik" olarak ayarlamanız veya istekte belirsiz bir "semanticQuery" özelliği eklemeniz gerekir. Sorgu yeniden yazma için anlam derecelendirmesi gereklidir.

    • En fazla beş sorgu yeniden yazması elde etmek için "queryRewrites" değerini "generative|count-5" olarak ayarlayın. Sayıyı 1 ile 10 arasında herhangi bir değere ayarlayabilirsiniz.

    • "queryRewrites" özelliğini ayarlayarak sorgunun yeniden yazılmasını istediğinizden, "queryLanguage" öğesini arama metin diline ayarlamanız gerekir. Arama hizmeti, sorgu yeniden yazmaları için aynı dili kullanır. Bu örnekte , "en-US" kullanırsınız. Desteklenen yerel ayarlar şunlardır: 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.

    • Yanıttaki sorgu yeniden yazmalarını almak için "debug" değerini "queryRewrites" olarak ayarlayın.

      Ipucu

      Test amacıyla yalnızca "debug": "queryRewrites" ayarlayın. Daha iyi performans için üretimde hata ayıklama kullanmayın.

    • Yalnızca en üstteki arama sonucunu döndürmek için "top" değerini 1 olarak ayarlayın.

  2. Sorguyu yürütmek ve sonuçları döndürmek için isteği gönderin.

Ardından, sorgunun yeniden yazılmasının ardından arama sonuçlarını değerlendirirsiniz.

Yanıtı değerlendirme

Aşağıda, sorgu yeniden yazmalarını içeren bir yanıt örneği verilmişti:

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

Dikkate almak için bazı önemli noktalar şunlardır:

  • Test için "debug" özelliğini "queryRewrites" olarak ayarladığınızdan, yanıt metin girişi sorgusu ve sorgu yeniden yazmaları içeren bir @search.debug nesne içerir.
  • "queryRewrites" özelliğini "generative|count-5" olarak ayarladığınızdan, yanıt en fazla beş sorgu yeniden yazması içerir.
  • "inputQuery" Değer, sorgu yeniden yazma için oluşturucu modele gönderilen sorgudur. Giriş sorgusu her zaman kullanıcının "search" sorgusuyla aynı değildir.

Burada, sorgu yeniden yazması olmayan bir yanıt örneği verilmiştır.

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

Sorgu yeniden yazma ile vektör sorguları

Anahtar sözcük arama ve vektör aramasını tek bir istekte ve birleşik yanıtta birleştirmek için arama isteğinize vektör sorguları ekleyebilirsiniz.

Sorgu yeniden yazmaları içeren bir vektör sorgusu ile ilgili bir sorgu örneği verilmiştir. Önceki bir örneği vektör sorgusu içerecek şekilde değiştirin.

  • İsteğe bir "vectorQueries" nesnesi ekleyin. Bu nesne, "tür" değerinin "text" olarak ayarlandığı bir vektör sorgusu içerir.
  • "text" değeri , "search" değeriyle aynıdır. Sorgu yeniden yazma işleminin çalışması için bu değerlerin aynı olması gerekir.
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
}

Yanıt, hem metin sorgusu hem de vektör sorgusu için sorgu yeniden yazmalarını içerir.

Hata ayıklama ile sorgu yeniden yazmalarını test edin

Sorgu yeniden yazmalarınızın beklendiği gibi çalıştığını doğrulamak için onları test etmelisiniz. Sorgu isteğinizde "debug": "queryRewrites" özelliğini ayarlayarak sorgu yeniden yazımlarını yanıtınızda alın. Ayar "debug" , test amacıyla isteğe bağlıdır. Daha iyi performans için bu özelliği üretimde ayarlamayın.

Kısmi yanıt nedenleri

Hata ayıklama (test) yanıtının text.rewrites ve vectors özellikleri için boş bir dizi içerdiğini gözlemleyebilirsiniz.

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

Yukarıdaki örnekte:

  • Yanıt, "Geçici" değerine sahip bir özellik içerir @search.semanticPartialResponseReason . Bu ileti, sorgulardan en az birinin tamamlanamadı olduğu anlamına gelir.
  • Yanıt ayrıca "OriginalQueryOnly" değerine sahip bir özellik içerir @search.semanticQueryRewriteResultType . Bu ileti, sorgu yeniden yazmalarının kullanılamadığı anlamına gelir. Arama sonuçlarını almak için yalnızca özgün sorgu kullanılır.

Sonraki adımlar

Anlam derecelendirmesi, anahtar sözcük arama ve vektör aramasını tek bir istekte ve birleşik yanıtta birleştiren karma sorgularda kullanılabilir.