Membuat pemberi saran untuk mengaktifkan pelengkapan otomatis dan hasil yang disarankan dalam kueri

Dalam Azure Cognitive Search, typeahead atau "search-as-you-type" diaktifkan melalui pemberi saran. Pemberi saran menyediakan daftar bidang yang mengalami tokenisasi tambahan dan menghasilkan urutan awalan untuk mendukung pencocokan pada istilah parsial. Misalnya, pemberi saran yang menyertakan bidang Kota dengan nilai untuk "Seattle" akan memiliki kombinasi awalan dari "sea", "seat", "seatt", dan "seattl" untuk mendukung typeahead.

Kecocokan pada istilah parsial dapat berupa kueri pelengakapan otomatis atau saran kecocokan. Pemberi saran yang sama mendukung kedua pengalaman.

Typeahead dapat menjadi pelengkapan otomatis, yang melengkapi input parsial untuk seluruh kueri istilah, atau saran yang mengundang klik pada kecocokan tertentu. Pelengkapan otomatis menghasilkan kueri. Saran menghasilkan dokumen yang cocok.

Tangkapan layar berikut dari Buat aplikasi pertama Anda di C# mengilustrasikan keduanya. Pelengkapan otomatis mengantisipasi istilah potensial, menyelesaikan "tw" dengan "in". Saran adalah hasil pencarian mini, di mana bidang seperti nama hotel mewakili dokumen pencarian hotel yang cocok dari indeks. Untuk saran, Anda dapat menampilkan bidang apa pun yang menyediakan informasi deskriptif.

Visual comparison of autocomplete and suggested queries

Anda dapat menggunakan fitur ini secara terpisah ataupun bersama-sama. Untuk mengimplementasikan perilaku ini di Azure Cognitive Search, terdapat komponen indeks dan kueri.

  • Tambahkan pemberi saran ke definisi indeks pencarian. Sisa artikel ini berfokus pada pembuatan pemberi saran.

  • Panggil kueri untuk mengaktifkan pemberi saran, dalam bentuk permintaan Saran atau permintaan Pelengkapan otomatis menggunakan salah satu API yang terdaftar di bawah ini.

Dukungan search-as-you-type Anda diaktifkan pada basis per bidang untuk bidang string. Anda dapat menerapkan perilaku typeahead dalam solusi pencarian yang sama jika Anda menginginkan pengalaman yang mirip dengan yang ditunjukkan dalam cuplikan layar. Kedua permintaan menargetkan koleksi dokumen dari indeks dan respons tertentu akan dikembalikan setelah pengguna menyediakan setidaknya tiga string input karakter.

Cara membuat pemberi saran

Untuk membuat pemberi saran, tambahkan ke definisi indeks. Pemberi saran mengambil nama dan koleksi bidang tempat pengalaman typeahead diaktifkan. Waktu terbaik untuk membuat pemberi saran adalah ketika Anda juga sedang mendefinisikan bidang yang akan menggunakannya.

  • Gunakan bidang string saja.

  • Jika bidang string adalah bagian dari tipe kompleks (misalnya, bidang Kota di dalam Alamat), sertakan induk di jalur bidang: "Address/City" (REST dan C# dan Python), atau ["Address"]["City"] (JavaScript).

  • Gunakan penganalisis Lucene standar default ("analyzer": null) atau bahasa penganalisis (misalnya "analyzer": "en.Microsoft") pada bidang tersebut.

Jika Anda mencoba membuat pemberi saran menggunakan bidang yang sudah ada sebelumnya, API akan melarangnya. Awalan dihasilkan selama pengindeksan ketika istilah parsial dalam dua atau lebih kombinasi karakter ditokenisasi bersama dengan keseluruhan istilah. Mengingat bahwa bidang yang ada sudah ditokenisasi, Anda harus membangun indeks kembali jika Anda ingin menambahkannya ke pemberi saran. Untuk informasi selengkapnya, lihat Cara membangun ulang indeks Azure Cognitive Search .

Memilih bidang

Meskipun pemberi saran memiliki beberapa properti, utamanya merupakan kumpulan bidang string yang memungkinkan Anda mengaktifkan pengalaman search-as-you-type. Terdapat satu pemberi saran untuk setiap indeks sehingga daftar pemberi saran harus menyertakan semua bidang yang menyumbangkan konten untuk saran dan pelengkapan otomatis.

Pelengkapan otomatis mengambil manfaat dari kumpulan bidang yang lebih besar untuk diambil karena konten tambahan memiliki potensi penyelesaian istilah yang lebih besar.

Di sisi lain, saran memberikan hasil yang lebih baik ketika pilihan bidang Anda selektif. Ingatlah bahwa saran tersebut adalah proksi untuk dokumen pencarian sehingga Anda menginginkan bidang yang paling mewakili satu hasil. Nama, judul, atau bidang unik lainnya yang membedakan di antara beberapa kecocokan berfungsi paling baik. Jika bidang terdiri dari nilai berulang, maka saran akan terdiri dari hasil yang identik dan akan membingungkan pengguna.

Untuk memenuhi pengalaman search-as-you-type Anda, tambahkan semua bidang yang Anda butuhkan untuk pelengkapan otomatis, tetapi gunakan "$select", "$top", "$filter", dan "searchFields" untuk mengontrol hasil untuk saran.

Pilih penganalisis

Pilihan penganalisis Anda menentukan bagaimana bidang ditokenisasi dan diberi awalan. Sebagai contoh, untuk string yang dipenggal seperti "peka-konteks", menggunakan penganalisis bahasa akan menghasilkan kombinasi token ini: "konteks", "peka", "peka-konteks". Seandainya Anda menggunakan penganalisis Lucene standar, string terpenggal tidak akan ada.

Saat mengevaluasi penganalisis, pertimbangkan untuk menggunakanAnalisis Teks API untuk wawasan tentang cara istilah diproses. Setelah indeks dibangun, Anda dapat mencoba berbagai penganalisis pada string untuk melihat output token.

Bidang yang menggunakan penganalisis kustom atau penganalisis bawaan (kecuali Lucene standar) secara eksplisit dilarang untuk mencegah hasil yang buruk.

Catatan

Jika Anda perlu menyiasati batasan penganalisis, misalnya jika Anda memerlukan penganalis kata kunci atau ngram untuk skenario kueri tertentu, Anda harus menggunakan dua bidang terpisah untuk konten yang sama. Ini akan memungkinkan salah satu bidang memiliki saran, sementara yang lain dapat diatur dengan konfigurasi penganalisis kustom.

Membuat menggunakan portal

Saat menggunakan Tambahkan Indeks atau wizard Impor data untuk membuat indeks, Anda memiliki opsi untuk mengaktifkan pemberi saran:

  1. Pada definisi indeks, masukkan nama untuk saran.

  2. Pada setiap definisi bidang untuk bidang baru, pilih kotak centang di kolom Saran. Kotak centang hanya tersedia pada bidang string.

Seperti yang telah disebutkan sebelumnya, pilihan penganalisis berdampak pada tokenisasi dan pemberian awalan. Pertimbangkan seluruh definisi bidang saat mengaktifkan pemberi saran.

Membuat menggunakan REST

Pada REST API, tambahkan pemberi saran melalui Buat Indeks atau Perbarui Indeks.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Buat menggunakan .NET

Pada C#, tentukan objek SearchSuggester. Suggesters adalah koleksi pada objek SearchIndex, tetapi hanya dapat mengambil satu item. Tambahkan saran ke definisi indeks.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Referensi properti

Properti Deskripsi
nama Ditentukan dalam definisi pemberi saran, tetapi juga dipanggil pada permintaan Pelengkapan Otomatis atau Saran.
sourceFields Ditentukan dalam definisi pemberi saran. Itu adalah daftar satu bidang atau lebih dalam indeks yang merupakan sumber konten untuk saran. Bidang harus berjenisEdm.String dan Collection(Edm.String). Jika penganalisis ditentukan pada bidang, penganalisis harus menjadi penganalisis leksikal yang dinamai dari daftar ini (bukan penganalisis kustom).

Sebagai praktik terbaik, tentukan hanya bidang yang meminjamkan diri mereka ke respons yang diharapkan dan sesuai, apakah itu string yang diselesaikan di bilah pencarian atau daftar dropdown.

Nama hotel adalah kandidat yang baik karena memiliki presisi. Bidang verbose seperti deskripsi dan komentar terlalu padat. Demikian pula bidang berulang, seperti kategori dan tag, juga kurang efektif. Dalam contoh, kami tetap menyertakan "kategori" untuk menunjukkan bahwa Anda dapat menyertakan beberapa bidang.
searchMode Parameter khusus REST, tetapi juga terlihat di portal. Parameter ini tidak tersedia di .NET SDK. Ini menunjukkan strategi yang digunakan untuk mencari frasa calon. Satu-satunya mode yang didukung adalah analyzingInfixMatching, yang saat ini cocok dengan permulaan dari istilah.

Buat pemberi saran

Pemberi saran digunakan dalam kueri. Setelah pemberi saran dibuat, hubungi salah satu API berikut untuk pengalaman search-as-you-type Anda:

Dalam aplikasi pencarian, kode klien harus memanfaatkan pustaka seperti jQuery Antarmuka Pengguna Pelengkapan Otomatis untuk mengumpulkan kueri parsial dan menyediakan kecocokan. Untuk informasi selengkapnya tentang tugas ini, lihat Menambahkan pelengkapan otomatis atau hasil yang disarankan ke kode klien.

Penggunaan API diilustrasikan dalam panggilan berikut ke REST API Pelengkapan Otomatis. Ada dua takeaway dari contoh ini. Pertama, seperti semua kueri, operasi ini bertentangan dengan kumpulan dokumen indeks dan kueri menyertakan parameter "pencarian", yang dalam hal ini menyediakan kueri parsial. Kedua, Anda harus menambahkan "suggesterName" ke permintaan. Jika pemberi saran tidak didefinisikan dalam indeks, panggilan untuk pelengkapan otomatis atau saran akan gagal.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2020-06-30
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Kode sampel

Langkah berikutnya

Pelajari selengkapnya tentang permintaan\ formulasi.