Bagikan melalui


Menulis ulang kueri dengan peringkat semantik di Azure AI Search (Pratinjau)

Catatan

Fitur ini masih dalam pratinjau umum. Pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas. Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Penulisan ulang kueri adalah proses mengubah kueri pengguna menjadi yang lebih efektif, menambahkan lebih banyak istilah dan menyempurnakan hasil pencarian. Layanan pencarian mengirimkan kueri pencarian (atau variasinya) ke model generatif yang menghasilkan kueri alternatif.

Penulisan ulang kueri meningkatkan hasil dari peringkat semantik dengan mengoreksi kesalahan ketik atau kesalahan ejaan dalam kueri pengguna, dan memperluas kueri dengan sinonim.

Cari dengan penulisan ulang kueri berfungsi seperti ini:

  • Kueri pengguna dikirim melalui search properti dalam permintaan.
  • Layanan pencarian mengirimkan kueri pencarian (atau variasinya) ke model generatif yang menghasilkan kueri alternatif.
  • Layanan pencarian menggunakan kueri asli dan kueri yang ditulis ulang untuk mengambil hasil pencarian.

Penulisan ulang kueri adalah fitur opsional. Tanpa penulisan ulang kueri, layanan pencarian hanya menggunakan kueri asli untuk mengambil hasil pencarian.

Catatan

Kueri yang ditulis ulang mungkin tidak berisi semua istilah yang tepat yang dimiliki kueri asli. Ini mungkin berdampak pada hasil pencarian jika kueri sangat spesifik dan diperlukan kecocokan yang tepat untuk pengidentifikasi unik atau kode produk.

Prasyarat

  • Layanan pencarian, Tingkat dasar atau yang lebih tinggi.

Catatan

Penulisan ulang kueri saat ini tersedia di wilayah Eropa Utara, dan Asia Tenggara.

  • Layanan pencarian Anda harus mengaktifkan ranker semantik. Tinjau peringkat semantik jika Anda memerlukan pengenalan fitur.

Penting

Peringkat semantik saat ini diperlukan untuk penulisan ulang kueri.

  • Indeks pencarian yang ada dengan konfigurasi semantik dan konten teks kaya. Contoh dalam panduan ini menggunakan data sampel hotel-sample-index untuk menunjukkan penulisan ulang kueri. Anda dapat menggunakan data dan indeks Anda sendiri untuk menguji penulisan ulang kueri.

  • Anda memerlukan klien web yang mendukung permintaan REST API. Contoh dalam panduan ini diuji dengan Visual Studio Code dengan ekstensi Klien REST.

Tip

Konten yang mencakup penjelasan atau definisi berfungsi paling baik untuk peringkat semantik.

Membuat permintaan pencarian dengan penulisan ulang kueri

Dalam contoh REST API ini, kami menggunakan Dokumen Pencarian untuk merumuskan permintaan. Untuk informasi selengkapnya tentang properti permintaan dan respons, lihat dokumentasi referensi API.

  1. Tempelkan permintaan berikut ke klien web sebagai templat.

    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
    }
    
    • Anda mengganti search-service-name dengan nama layanan pencarian Anda.

    • Anda mengganti hotels-sample-index dengan nama indeks Anda jika berbeda.

    • Kami mengatur "pencarian" ke kueri pencarian teks lengkap. Properti pencarian diperlukan untuk penulisan ulang kueri, kecuali Anda menentukan kueri vektor. Jika Anda menentukan kueri vektor, maka teks "pencarian" harus cocok dengan "text" properti "vectorQueries" objek. String pencarian Anda dapat mendukung sintaksis sederhana atau sintaks Lucene penuh.

    • Kami mengatur "semanticConfiguration" ke konfigurasi semantik yang telah ditentukan sebelumnya yang disematkan dalam indeks Anda.

    • Kami mengatur "queryType" ke "semantik". Kita perlu mengatur "queryType" ke "semantik" atau menyertakan properti "semanticQuery" yang tidak ada dalam permintaan. Peringkat semantik diperlukan untuk penulisan ulang kueri.

    • Kami mengatur "queryRewrites" ke "generative|count-5" untuk mendapatkan hingga lima penulisan ulang kueri. Anda dapat mengatur hitungan ke nilai apa pun antara 1 dan 10.

    • Karena kami meminta penulisan ulang kueri dengan mengatur properti "queryRewrites", kita harus mengatur "queryLanguage" ke bahasa teks pencarian. layanan Pencarian menggunakan bahasa yang sama untuk penulisan ulang kueri. Dalam contoh ini, kami menggunakan "en-US". Lokal yang didukung adalah: en-AU, , en-CA, en-GB, en-INen-US, it-ITsr-BAis-ISro-ROsl-SLhy-AMpt-BRsk-SKhu-HUpa-INru-RUhr-BAnl-NLpt-PThi-INnb-NOpl-PLgu-INms-BNno-NOgl-ESml-INnl-BEfr-FRlt-LTms-MYmr-INlv-LVkn-INko-KRja-JPhr-HRid-IDhe-ILfr-CAga-IEfi-FIeu-ESfa-AEet-EEes-ESes-MXel-GRde-DEar-EGda-DKcs-CZar-JOca-ESbn-INar-MAar-KWar-SAbg-BG, sr-ME sr-RS, , sv-SE, te-INta-IN, th-TH, tr-TR, uk-UA, ur-PK, vi-VN, , zh-CN, zh-TW.

    • Kami mengatur "debug" ke "queryRewrites" untuk mendapatkan penulisan ulang kueri dalam respons.

      Tip

      Hanya diatur "debug": "queryRewrites" untuk tujuan pengujian. Untuk performa yang lebih baik, jangan gunakan debug dalam produksi.

    • Kami mengatur "atas" ke 1 untuk mengembalikan hanya hasil pencarian teratas.

  2. Kirim permintaan untuk menjalankan kueri dan mengembalikan hasil.

Selanjutnya, kami mengevaluasi hasil pencarian dengan penulisan ulang kueri.

Mengevaluasi respons

Berikut adalah contoh respons yang menyertakan penulisan ulang kueri:

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

Berikut adalah beberapa poin penting yang perlu diperhatikan:

  • Karena kami mengatur properti "debug" ke "queryRewrites" untuk pengujian, respons menyertakan @search.debug objek dengan kueri input teks dan penulisan ulang kueri.
  • Karena kami mengatur properti "queryRewrites" ke "generative|count-5", respons mencakup hingga lima penulisan ulang kueri.
  • Nilainya "inputQuery" adalah kueri yang dikirim ke model generatif untuk penulisan ulang kueri. Kueri input tidak selalu sama dengan kueri pengguna "search" .

Berikut adalah contoh respons tanpa penulisan ulang kueri.

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

Kueri vektor dengan penulisan ulang kueri

Anda dapat menyertakan kueri vektor dalam permintaan pencarian Anda untuk menggabungkan pencarian kata kunci dan pencarian vektor ke dalam satu permintaan dan respons terpadu.

Berikut adalah contoh kueri yang menyertakan kueri vektor dengan penulisan ulang kueri. Kami memodifikasi contoh sebelumnya untuk menyertakan kueri vektor.

  • Kami menambahkan objek "vectorQueries" ke permintaan. Objek ini mencakup kueri vektor dengan "jenis" diatur ke "teks".
  • Nilai "teks" sama dengan nilai "pencarian". Nilai-nilai ini harus identik agar penulisan ulang kueri berfungsi.
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
}

Respons mencakup penulisan ulang kueri untuk kueri teks dan kueri vektor.

Uji penulisan ulang kueri dengan debug

Anda harus menguji penulisan ulang kueri Anda untuk memastikan bahwa kueri berfungsi seperti yang diharapkan. Atur "debug": "queryRewrites" properti dalam permintaan kueri Anda untuk mendapatkan penulisan ulang kueri dalam respons. Pengaturan "debug" bersifat opsional untuk tujuan pengujian. Untuk performa yang lebih baik, jangan atur properti ini dalam produksi.

Alasan respons parsial

Anda mungkin mengamati bahwa respons debug (pengujian) menyertakan array kosong untuk text.rewrites properti dan 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
}

Dalam contoh sebelumnya:

  • Respons mencakup @search.semanticPartialResponseReason properti dengan nilai "Sementara". Pesan ini berarti bahwa setidaknya salah satu kueri gagal diselesaikan.
  • Respons juga mencakup @search.semanticQueryRewriteResultType properti dengan nilai "OriginalQueryOnly". Pesan ini berarti bahwa penulisan ulang kueri tidak tersedia. Hanya kueri asli yang digunakan untuk mengambil hasil pencarian.

Langkah berikutnya

Peringkat semantik dapat digunakan dalam kueri hibrid yang menggabungkan pencarian kata kunci dan pencarian vektor ke dalam satu permintaan dan respons terpadu.