Menambahkan navigasi tersaring ke hasil pencarian

Note

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Navigasi tersaring digunakan untuk pemfilteran yang diarahkan sendiri pada hasil kueri di aplikasi pencarian, di mana aplikasi Anda menawarkan kontrol formulir untuk mencakup pencarian ke grup dokumen (misalnya, kategori atau merek), dan Pencarian Azure AI menyediakan struktur dan filter data untuk mendukung pengalaman.

Dalam artikel ini, Anda akan mempelajari langkah-langkah untuk mengembalikan struktur navigasi berfasilitas dalam Pencarian Azure AI. Setelah Anda terbiasa dengan konsep dasar dan klien, lanjutkan ke contoh faset untuk sintaks tentang berbagai kasus penggunaan, termasuk faset dasar dan hitungan unik.

Kemampuan faset tambahan tersedia melalui API pratinjau:

  • struktur faset berbentuk hierarki
  • pemfilteran aspek
  • agregasi faset

Contoh navigasi faset menyediakan sintaks dan penggunaan untuk fitur pratinjau.

Navigasi tersaring di halaman pencarian

Faset bersifat dinamis karena didasarkan pada hasil dari setiap kueri spesifik. Tanggapan pencarian membawa semua kelompok faset yang digunakan untuk menavigasi dokumen dalam hasilnya. Kueri dijalankan terlebih dahulu, lalu aspek ditarik dari hasil saat ini dan dirakit menjadi struktur navigasi berbasis aspek.

Dalam Pencarian Azure AI, faset memiliki satu lapisan yang dalam dan tidak dapat menjadi hierarkis kecuali Anda menggunakan API versi pratinjau. Jika Anda tidak terbiasa dengan struktur navigasi bersegi, contoh berikut menunjukkan satu di sebelah kiri. Hitungan menunjukkan jumlah kecocokan untuk setiap faset. Dokumen yang sama dapat diwakili dalam beberapa aspek.

Screenshot dari hasil pencarian berfasilitas.

Fungsi faset dapat membantu Anda menemukan apa yang Anda cari, serta memastikan Anda tidak mendapatkan hasil kosong. Sebagai pengembang, faset memungkinkan Anda mengekspos kriteria pencarian yang paling berguna untuk menavigasi indeks pencarian Anda.

Navigasi tersaring dalam kode

Faset diaktifkan pada bidang yang didukung dalam indeks, lalu ditentukan pada kueri. Struktur navigasi beraspek ditampilkan di awal respons, diikuti oleh hasilnya.

Contoh REST berikut adalah kueri kosong ("search": "*") yang terlingkup ke seluruh indeks (lihat sampel hotel bawaan). Parameter facets menentukan bidang "Kategori".

POST https://{{service_name}}.search.windows.net/indexes/hotels-sample/docs/search?api-version={{api_version}}
{
    "search": "*",
    "queryType": "simple",
    "select": "",
    "searchFields": "",
    "filter": "",
    "facets": [ "Category"], 
    "orderby": "",
    "count": true
}

Respon untuk contoh dimulai dengan struktur navigasi berfasilitas. Struktur terdiri dari nilai-nilai "Kategori" dan jumlah hotel untuk setiap kategori tersebut. Ini diikuti oleh hasil pencarian lainnya, dipangkas di sini hingga hanya menyisakan satu dokumen demi singkatnya. Contoh ini berfungsi dengan baik karena beberapa alasan. Jumlah faset untuk bidang ini berada di bawah batas (defaultnya adalah 10) sehingga semuanya muncul, dan setiap hotel dalam indeks 50 hotel diwakili dalam salah satu kategori ini.

{
    "@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels-sample')/$metadata#docs(*)",
    "@odata.count": 50,
    "@search.facets": {
        "Category": [
            {
                "count": 13,
                "value": "Budget"
            },
            {
                "count": 12,
                "value": "Resort and Spa"
            },
            {
                "count": 9,
                "value": "Luxury"
            },
            {
                "count": 7,
                "value": "Boutique"
            },
            {
                "count": 5,
                "value": "Suite"
            },
            {
                "count": 4,
                "value": "Extended-Stay"
            }
        ]
    },
    "value": [
        {
            "@search.score": 1.0,
            "HotelId": "1",
            "HotelName": "Stay-Kay City Hotel",
            "Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.",
            "Category": "Boutique",
            "Tags": [
                "pool",
                "air conditioning",
                "concierge"
            ],
            "ParkingIncluded": false,
        },
        . . . 
    ]
}

Mengaktifkan faset pada bidang

Anda dapat menambahkan faset ke bidang baru yang berisi teks biasa atau konten numerik. Jenis data yang didukung termasuk string, tanggal, bidang boolean, dan bidang numerik (tetapi bukan vektor).

Anda dapat menggunakan Azure portal, REST API, Azure SDK atau metode apa pun yang mendukung pembuatan atau pembaruan skema indeks di Pencarian Azure AI. Sebagai langkah pertama, identifikasi bidang mana yang akan digunakan untuk faset.

Pilih bidang mana yang akan dikaitkan

Faset dapat dihitung melalui bidang dan koleksi nilai tunggal. Bidang yang paling berfungsi dalam navigasi tersaring memiliki karakteristik ini:

  • Konten yang dapat dibaca oleh manusia (non-vektor).
  • Kardinalitas rendah (beberapa nilai berbeda yang berulang di seluruh dokumen di korpus pencarian Anda).
  • Nilai deskriptif singkat (satu atau dua kata) yang tampil dengan baik dalam pohon navigasi.

Nilai dalam bidang, dan bukan nama bidang itu sendiri, menghasilkan faset dalam struktur navigasi tersaring. Jika faset adalah bidang string bernama Warna, faset berwarna biru, hijau, dan nilai lainnya untuk bidang tersebut. Tinjau nilai bidang untuk memastikan tidak ada kesalahan ketik, null, atau perbedaan huruf besar/kecil. Pertimbangkan untuk menetapkan normalizer ke bidang yang bisa difilter dan difaset untuk memuluskan variasi kecil dalam teks. Misalnya, "Kanada", "KANADA", dan "kanada" semuanya akan dinormalisasi menjadi satu wadah.

Hindari bidang yang tidak didukung

Anda tidak dapat mengatur faset pada bidang yang ada, pada bidang vektor, atau bidang jenis Edm.GeographyPoint atau Collection(Edm.GeographyPoint).

Pada koleksi bidang kompleks, "facetable" harus bernilai null.

Mulai dengan definisi bidang baru

Atribut yang memengaruhi bagaimana bidang diindeks hanya dapat diatur saat bidang dibuat. Pembatasan ini berlaku untuk faset dan filter.

Jika indeks Anda sudah ada, Anda dapat menambahkan definisi bidang baru yang menyediakan faset. Dokumen yang ada dalam indeks mendapatkan nilai null untuk bidang baru. Nilai null ini akan diganti saat Anda berikutnya memperbarui indeks.

  1. Di halaman layanan pencarian Azure portal, buka tab Fields indeks dan pilih Tambahkan bidang.

  2. Berikan nama, jenis data, dan atribut. Kami merekomendasikan menambahkan yang dapat dipasangi filter karena umumnya filter diatur berdasarkan kelompok faset dalam respons. Kami merekomendasikan penggunaan fitur pengurutan karena filter menghasilkan hasil yang tidak terurut, dan Anda mungkin ingin mengaturnya dalam aplikasi Anda.

    Anda juga dapat mengatur agar dapat dicari jika Anda juga ingin mendukung pencarian teks lengkap pada kolom tersebut, dan dapat diambil jika Anda ingin menyertakan kolom dalam respons pencarian.

    Screenshot halaman Tambahkan bidang di Azure portal.

  3. Simpan definisi bidang.

Mengembalikan faset dalam kueri

Ingat bahwa faset dihitung secara dinamis dari hasil dalam respons kueri. Anda hanya mendapatkan faset untuk dokumen yang ditemukan oleh kueri saat ini.

Gunakan tampilan JSON di Search Explorer untuk mengatur parameter faset di Azure portal.

  1. Pilih indeks dan buka Search Explorer di Tampilan JSON.
  2. Berikan kueri dalam JSON. Anda dapat mengetiknya, menyalin JSON dari contoh REST, atau menggunakan intellisense untuk membantu sintaksis. Lihat contoh REST di tab berikutnya untuk referensi tentang ekspresi faset.
  3. Pilih Cari untuk memperoleh hasil beraspek, diekspresikan dalam format JSON.

Berikut adalah cuplikan layar contoh kueri faset dasar pada indeks sampel hotel. Anda dapat menempelkan contoh lain dalam artikel ini untuk mengembalikan hasil di Search Explorer.

Screenshot halaman Search Explorer di Azure portal.

Praktik terbaik untuk bekerja dengan faset

Bagian ini adalah kumpulan tips dan solusi yang berguna untuk pengembangan aplikasi.

Sebaiknya C#: Tambah pencarian pada aplikasi web untuk contoh navigasi bertingkat yang menyertakan kode untuk lapisan presentasi. Sampel juga mencakup filter, saran, dan lengkapi otomatis. Ini menggunakan JavaScript dan React untuk lapisan presentasi.

Menginisialisasi struktur navigasi tersaring dengan string pencarian yang tidak memenuhi syarat atau kosong

Sangat berguna untuk menginisialisasi halaman pencarian dengan kueri yang terbuka ("search": "*") untuk sepenuhnya mengisi struktur navigasi berfasilitas. Segera setelah Anda meneruskan istilah kueri dalam permintaan, struktur navigasi tersaring dilingkupkan hanya untuk kecocokan dalam hasil, bukan seluruh indeks. Praktik ini berguna untuk memverifikasi perilaku faset dan filter selama pengujian. Jika Anda menyertakan kriteria kecocokan dalam kueri, respons mengecualikan dokumen yang tidak cocok, yang memiliki efek hilir potensial untuk mengecualikan faset.

Faset yang jelas

Saat Anda merancang pengalaman pengguna, ingatlah untuk menambahkan mekanisme untuk membersihkan faset. Pendekatan umum untuk menghapus faset adalah dengan mengeluarkan kueri terbuka untuk mereset halaman.

Nonaktifkan faset untuk menghemat storage dan meningkatkan performa

Untuk pengoptimalan performa dan storage, atur "facetable": false untuk bidang yang tidak boleh digunakan sebagai faset. Contohnya termasuk bidang string untuk nilai unik, seperti ID atau nama produk, untuk mencegah penggunaan yang tidak disengaja (dan tidak efektif) dalam navigasi bertingkat. Praktik terbaik ini sangat penting untuk REST API, yang memungkinkan filter dan faset pada bidang string secara default.

Ingatlah bahwa Anda tidak dapat menggunakan bidang Edm.GeographyPoint atau Collection(Edm.GeographyPoint) di navigasi tersaring. Ingat bahwa faset bekerja paling baik di bidang dengan kardinalitas rendah. Karena bagaimana koordinat geografis ditentukan, jarang sekali dua set koordinat yang identik dalam himpunan data tertentu. Dengan demikian, faset tidak didukung untuk koordinat geografis. Anda harus menggunakan kolom kota atau wilayah untuk memisahkan berdasarkan lokasi.

Periksa data tidak valid

Saat Anda menyiapkan data untuk pengindeksan, periksa bidang untuk nilai null, kesalahan ejaan atau perbedaan huruf besar/kecil, dan versi tunggal dan jamak dari kata yang sama. Secara bawaan, filter dan faset tidak melalui analisis leksikal atau pemeriksaan ejaan (pratinjau), yang berarti bahwa semua nilai dari bidang "facetable" dapat menjadi faset potensial, meskipun kata-katanya hanya berbeda satu karakter.

Normalizers dapat mengatasi ketidakcocokan data dengan memperbaiki perbedaan huruf besar-kecil dan karakter. Jika tidak, untuk memeriksa data, Anda dapat memeriksa bidang di sumbernya, atau menjalankan kueri yang mengembalikan nilai dari indeks.

Indeks bukanlah tempat terbaik untuk memperbaiki nilai null atau tidak valid. Anda harus memperbaiki masalah data di sumber Anda, dengan asumsi itu adalah database atau storage persisten, atau dalam langkah pembersihan data yang Anda lakukan sebelum pengindeksan.

Memesan wadah faset

Meskipun Anda dapat mengurutkan konten di dalam keranjang faset, tidak ada parameter untuk mengontrol urutan keranjang faset dalam keseluruhan struktur navigasi. Jika Anda ingin wadah faset dalam urutan tertentu, Anda harus menyediakannya dalam kode aplikasi.

Perbedaan dalam jumlah faset

Dalam keadaan tertentu, Anda mungkin menemukan bahwa jumlah faset tidak sepenuhnya akurat karena arsitektur sharding. Setiap indeks pencarian tersebar di beberapa pecahan, dan setiap shard melaporkan aspek N teratas menurut jumlah dokumen, yang kemudian digabungkan menjadi satu hasil. Karena ini hanya faset N teratas untuk setiap shard, anda dapat melewatkan atau menghitung dokumen yang cocok dalam respons faset.

Untuk menjamin akurasi, Anda dapat secara artifisial menggelembungkan hitungan:<angka> ke angka besar untuk memaksa pelaporan penuh dari setiap pecahan. Anda dapat menentukan "count": "0" untuk faset yang tidak terbatas. Atau, Anda dapat mengatur "hitungan" ke nilai yang lebih besar dari atau sama dengan jumlah nilai unik bidang berfaset. Misalnya, jika Anda menghadapi bidang atribut ukuran yang memiliki lima nilai unik, Anda dapat menetapkan "count:5" untuk memastikan semua kecocokan diwakili dalam respons faset.

Pengorbanan dengan solusi ini adalah peningkatan latensi kueri, jadi gunakan hanya jika diperlukan.

Mempertahankan struktur navigasi faset secara asinkron dari hasil yang difilter

Dalam Pencarian Azure AI, faset hanya ada untuk hasil saat ini. Namun, ini adalah persyaratan aplikasi umum untuk mempertahankan sekumpulan faset statis sehingga pengguna dapat menavigasi secara terbalik, menelusuri kembali langkah-langkah untuk menjelajahi jalur alternatif melalui konten pencarian.

Jika Anda menginginkan sekumpulan faset statis bersama pengalaman penelusuran dinamis, Anda dapat menerapkannya dengan menggunakan dua kueri yang difilter: satu dicakup ke hasil, yang lain digunakan untuk membuat daftar faset statis untuk tujuan navigasi.

Mengimbangi jumlah faset besar melalui filter

Hasil pencarian dan hasil faset yang terlalu besar dapat dipangkas dengan menambahkan filter. Dalam contoh berikut, dalam kueri untuk komputasi cloud, 254 item memiliki spesifikasi internal sebagai tipe konten. Jika hasil terlalu besar, menambahkan filter dapat membantu pengguna Anda menyempurnakan kueri dengan menambahkan lebih banyak kriteria.

Item tidak saling eksklusif. Jika item memenuhi kriteria kedua filter, item dihitung di masing-masing filter. Duplikasi ini dimungkinkan ketika melakukan faset pada bidang Collection(Edm.String), yang sering digunakan untuk mengimplementasikan pelabelan dokumen.

Search term: "cloud computing"
Content type
   Internal specification (254)
   Video (10)

Langkah berikutnya