Menambahkan profil penilaian ke indeks pencarian

Untuk kueri pencarian teks lengkap, mesin cari menghitung skor pencarian untuk setiap dokumen yang cocok, yang memungkinkan hasil diberi peringkat dari tinggi ke rendah. Azure Cognitive Search menggunakan algoritma penilaian default untuk menghitung skor awal, tetapi Anda dapat menyesuaikan perhitungan melalui profil penilaian.

Profil penilaian disematkan dalam definisi indeks dan mencakup properti untuk meningkatkan skor kecocokan, di mana kriteria tambahan yang ditemukan di profil memberikan logika yang meningkatkan. Misalnya, Anda mungkin ingin meningkatkan kecocokan berdasarkan potensi pendapatan mereka, mempromosikan item yang lebih baru, atau mungkin meningkatkan item yang sudah terlalu lama berada di inventaris.

Tidak terbiasa dengan konsep relevansi? Segmen video berikut ini langsung menunjukkan cara kerja profil penilaian di Azure Cognitive Search, tetapi videonya juga membahas konsep-konsep dasar. Anda mungkin juga ingin meninjau Pemberian peringkat dan penilaian kemiripan untuk mengetahui informasi dasar.

Apa itu profil penilaian?

Profil penilaian adalah bagian dari definisi indeks, terdiri dari bidang, fungsi, dan parameter tertimbang. Tujuan profil penilaian adalah untuk meningkatkan atau memperkuat dokumen yang cocok berdasarkan kriteria yang Anda berikan.

Definisi berikut menunjukkan profil sederhana bernama 'geo'. Yang satu ini meningkatkan hasil yang memiliki istilah pencarian di bidang hotelName. Ini juga menggunakan fungsi distance untuk mendukung hasil yang berada dalam jarak sepuluh kilometer dari lokasi saat ini. Jika seseorang mencari dengan istilah 'penginapan', dan 'penginapan' kebetulan menjadi bagian dari nama hotel, dokumen yang mencakup hotel dengan 'penginapan' dalam radius 10 KM dari lokasi saat ini akan tampak lebih tinggi dalam hasil pencarian.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Untuk menggunakan profil penilaian ini, kueri Anda dirumuskan agar menentukan parameter scoringProfile dalam permintaan.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameter": currentLocation--122.123,44.77233
}

Kueri ini mencari istilah "penginapan" dan meneruskan lokasi saat ini. Perhatikan bahwa kueri ini menyertakan parameter lain, seperti scoringParameter. Parameter kueri dijelaskan di Dokumen Pencarian (REST API).

Klik Contoh selengkapnya untuk meninjau contoh profil penilaian yang lebih detail.

Bagaimana skor dihitung

Skor dihitung untuk kueri pencarian teks lengkap untuk memberi peringkat pencocokan yang paling relevan dan menampilkannya di bagian atas respons. Skor keseluruhan untuk setiap dokumen adalah agregasi skor individu untuk setiap bidang, di mana skor individu dari setiap bidang dihitung berdasarkan frekuensi istilah dan frekuensi dokumen dari istilah yang dicari dalam bidang tersebut (dikenal sebagai TF-IDF atau frekuensi istilah-inversi frekuensi dokumen).

Tip

Anda dapat menggunakan parameter featuresMode untuk meminta detail penilaian tambahan dengan hasil pencarian (termasuk skor tingkat bidang).

Kapan harus menambahkan logika penilaian

Anda harus membuat satu atau beberapa profil penilaian jika perilaku peringkat default tidak berjalan cukup jauh dalam memenuhi tujuan bisnis Anda. Misalnya, Anda mungkin memutuskan bahwa relevansi pencarian harus mendukung item yang baru ditambahkan. Demikian juga, Anda mungkin memiliki bidang yang berisi margin laba, atau beberapa bidang lain yang menunjukkan potensi pendapatan. Meningkatkan hasil yang lebih berarti bagi pengguna atau bisnis Anda sering menjadi faktor penentu dalam penggunaan profil penilaian.

Pengurutan berbasis relevansi dalam halaman pencarian juga diimplementasikan melalui profil penilaian. Pertimbangkan halaman hasil pencarian yang telah Anda gunakan di masa lalu yang memungkinkan Anda mengurutkan berdasarkan harga, tanggal, peringkat, atau relevansi. Di Azure Cognitive Search, profil penilaian dapat digunakan untuk mendorong opsi ‘relevansi’. Definisi relevansi dikendalikan oleh Anda, yang dipredikatkan pada tujuan bisnis dan jenis pengalaman pencarian yang ingin Anda berikan.

Contoh selengkapnya

Contoh ini memperlihatkan skema indeks dengan dua profil penilaian (boostGenre, newAndHighlyRated). Setiap kueri terhadap indeks ini yang menyertakan profil sebagai parameter kueri akan menggunakan profil untuk menilai tataan hasil.

Profil boostGenre menggunakan bidang teks tertimbang, meningkatkan kecocokan yang ditemukan di bidang albumTitle, genre, dan artistName. Bidang tersebut masing-masing ditingkatkan 1,5, 5, dan 2. Mengapa genre meningkat jauh lebih tinggi daripada yang lain? Jika pencarian dilakukan melalui data yang agak homogen (seperti halnya dengan 'genre' dalam musicstoreindex), Anda mungkin memerlukan ragam yang lebih besar dalam bobot relatif. Misalnya, dalam musicstoreindex, 'rock' muncul sebagai genre dan dalam deskripsi genre yang diungkapkan secara identik. Jika Anda ingin agar genre melebihi bobot deskripsi genre, bidang genre akan membutuhkan bobot relatif yang jauh lebih tinggi.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Langkah-langkah untuk menambahkan profil penilaian

Untuk menerapkan perilaku penilaian kustom, tambahkan profil penilaian ke skema yang menentukan indeks. Anda dapat memiliki hingga 100 profil penilaian dalam indeks (lihat Batas Layanan), namun Anda hanya dapat menentukan satu profil dalam satu waktu pada kueri tertentu.

  1. Mulailah dengan definisi indeks. Anda dapat menambahkan dan memperbarui profil penilaian pada indeks yang sudah ada tanpa harus membangunnya kembali. Gunakan permintaan Perbarui Indeks untuk memposting revisi Anda.

  2. Mulai dengan Templat yang disediakan dalam topik ini.

  3. Berikan nama. Profil penilaian bersifat opsional, namun jika Anda menambahkan, nama akan diperlukan. Pastikan untuk mengikuti konvensi penamaan Cognitive Search untuk bidang (dimulai dengan huruf, hindari karakter khusus dan kata khusus).

  4. Tentukan kriteria peningkatan. Satu profil dapat berisi bidang, fungsi tertimbang, atau keduanya.

Anda harus bekerja secara berulang, menggunakan himpunan data yang akan membantu Anda membuktikan atau menyangkal efektivitas profil tertentu.

Profil penilaian dapat ditentukan di portal Azure sebagaimana yang ditunjukkan dalam cuplikan layar berikut, atau secara terprogram melalui REST API atau di Azure SDK, seperti kelas Profil Penilaian di Azure SDK untuk .NET.

Menambahkan halaman profil penilaian

Menggunakan bidang tertimbang

Gunakan bidang tertimbang ketika konteks bidang penting dan kueri adalah pencarian teks lengkap (juga disebut sebagai pencarian teks bentuk bebas). Misalnya, jika kueri menyertakan istilah "bandara", Anda mungkin ingin agar "bandara" di bidang Description memiliki bobot lebih dari di HotelName.

Bidang tertimbang terdiri dari bidang yang dapat dicari dan angka positif yang digunakan sebagai pengali. Jika skor bidang asli HotelName adalah 3, skor yang ditingkatkan untuk bidang itu menjadi 6, yang berkontribusi pada skor keseluruhan yang lebih tinggi untuk dokumen induk itu sendiri.

"scoringProfiles": [  
{  
  "name": "boostKeywords",  
  "text": {  
    "weights": {  
      "HotelName": 2,  
      "Description": 5 
    }  
  }  
}

Menggunakan fungsi

Gunakan fungsi ketika bobot relatif yang sederhana tidak mencukupi atau tidak berlaku, seperti dalam kasus jarak dan kesegaran, yang merupakan perhitungan atas data numerik. Anda dapat menentukan beberapa fungsi per profil penilaian.

Fungsi Deskripsi
"freshness" Peningkatan berdasarkan nilai dalam bidang datetime (Edm.DataTimeOffset). Fungsi ini memiliki atribut boostingDuration sehingga Anda dapat menentukan nilai yang mewakili jumlah waktu di mana peningkatan terjadi.
"magnitude" Peningkatan berdasarkan seberapa tinggi atau rendah suatu nilai numerik. Skenario yang memanggil fungsi ini meliputi peningkatan berdasarkan margin laba, harga tertinggi, harga terendah, atau hitungan unduhan. Fungsi ini hanya dapat digunakan dengan bidang Edm.Double dan Edm.Int. Untuk fungsi magnitude ini, Anda dapat membalikkan rentang, tinggi ke rendah, jika Anda menginginkan pola terbalik (misalnya, untuk meningkatkan item dengan harga lebih rendah lebih dari item dengan harga lebih tinggi). Mengingat kisaran harga dari $100 hingga $1, Anda akan menetapkan "boostingRangeStart" pada 100 dan "boostingRangeEnd" pada 1 untuk meningkatkan item dengan harga lebih rendah.
"distance" Peningkatan berdasarkan kedekatan atau lokasi geografis. Fungsi ini hanya dapat digunakan dengan bidang Edm.GeographyPoint.
"tag" Peningkatan berdasarkan tag yang umum untuk dokumen pencarian dan string kueri. Tag disediakan dalam tagsParameter. Fungsi ini hanya dapat digunakan dengan bidang Edm.String dan Collection (Edm.String).

Aturan untuk menggunakan fungsi

  • Fungsi hanya dapat diterapkan ke bidang yang diatribusikan sebagai dapat difilter.
  • Jenis fungsi ("freshness", "magnitude", "distance", "tag") harus huruf kecil.
  • Fungsi tidak boleh menyertakan nilai kosong atau null.

Templat

Bagian ini memperlihatkan sintaksis dan templat untuk mencetak profil. Lihat Referensi properti di bagian berikutnya untuk melihat deskripsi atribut profil penilaian.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Referensi properti

Atribut Deskripsi
nama Wajib diisi. Ini adalah nama profil penilaian. Ini mengikuti konvensi penamaan yang sama dari sebuah bidang. Ini harus diawali dengan huruf, tidak boleh berisi titik-titik, titik dua, atau simbol @, dan tidak boleh diawali dengan frasa 'azureSearch' (peka huruf besar/kecil).
teks Berisi properti bobot.
bobot Opsional. Pasangan nama-nilai yang menentukan bidang yang dapat dicari dan bilangan bulat positif atau angka floating-point untuk meningkatkan skor bidang. Bilangan bulat atau angka positif menjadi pengali untuk skor bidang asli yang dihasilkan oleh algoritma peringkat. Misalnya, jika skor bidang adalah 2 dan nilai beratnya adalah 3, skor yang ditingkatkan untuk bidang tersebut menjadi 6. Skor bidang individu kemudian diagregasi untuk membuat skor bidang dokumen, yang kemudian digunakan untuk menentukan peringkat dokumen dalam hasil.
fungsi Opsional. Fungsi penilaian hanya dapat diterapkan ke bidang yang dapat difilter.
functions > type Wajib untuk fungsi penilaian. Menunjukkan jenis fungsi yang akan digunakan. Nilai yang valid termasuk besaran, kesegaran, jarak, dan tag. Anda dapat menyertakan lebih dari satu fungsi di setiap profil penilaian. Nama fungsi harus dalam huruf kecil.
functions > boost Wajib untuk fungsi penilaian. Angka positif yang digunakan sebagai pengali untuk skor mentah. Ini tidak boleh sama dengan 1.
functions > fieldname Wajib untuk fungsi penilaian. Fungsi penilaian hanya dapat diterapkan ke bidang yang merupakan bagian dari kumpulan bidang indeks, dan yang dapat difilter. Selain itu, setiap jenis fungsi memperkenalkan pembatasan tambahan (kesegaran digunakan dengan bidang datetime, besaran dengan bidang bilangan bulat atau ganda, dan jarak dengan bidang lokasi). Anda hanya dapat menentukan satu bidang per definisi fungsi. Misalnya, untuk menggunakan besaran dua kali pada profil yang sama, Anda harus menyertakan dua besaran definisi, satu untuk masing-masing bidang.
functions > interpolation Wajib untuk fungsi penilaian. Mendefinisikan kemiringan yang skornya meningkat dari awal rentang hingga akhir rentang. Nilai yang valid termasuk Linear (default), Konstanta, Kuadrat, dan Logaritma. Lihat Mengatur interpolasi untuk detailnya.
functions > magnitude Fungsi penilaian besaran digunakan untuk mengganti peringkat berdasarkan rentang nilai untuk bidang numerik. Beberapa contoh penggunaan yang paling umum dari ini adalah:

"Peringkat bintang:" Mengganti penilaian berdasarkan nilai dalam bidang "Peringkat Bintang". Jika dua item relevan, item dengan peringkat yang lebih tinggi akan ditampilkan terlebih dahulu.
"Margin:" Jika dua dokumen relevan, peritel mungkin ingin meningkatkan dokumen yang memiliki margin lebih tinggi terlebih dahulu.
"Jumlah klik:" Untuk aplikasi yang melacak tindakan klik ke produk atau halaman, Anda dapat menggunakan magnitude untuk meningkatkan item yang cenderung mendapatkan lalu lintas terbanyak.
"Jumlah unduhan:" Untuk aplikasi yang melacak unduhan, fungsi magnitude memungkinkan Anda meningkatkan item yang memiliki unduhan terbanyak.
functions > magnitude > boostingRangeStart Mengatur nilai awal rentang di mana besarannya diberi skor. Nilai harus berupa bilangan bulat atau angka floating-point. Untuk peringkat bintang 1 sampai 4, ini akan menjadi 1. Untuk margin lebih dari 50%, ini akan menjadi 50.
functions > magnitude > boostingRangeEnd Mengatur nilai akhir rentang di mana besarannya diberi skor. Nilai harus berupa bilangan bulat atau angka floating-point. Untuk peringkat bintang 1 sampai 4, ini akan menjadi 4.
functions > magnitude > constantBoostBeyondRange Nilai yang valid adalah true atau false (default). Jika disetel ke true, peningkatan penuh akan terus berlaku untuk dokumen yang memiliki nilai untuk bidang target yang lebih tinggi dari ujung atas rentang. Jika false, peningkatan fungsi ini tidak akan diterapkan ke dokumen yang memiliki nilai untuk bidang target yang berada di luar rentang.
functions > freshness Fungsi penilaian kesegaran digunakan untuk mengganti skor peringkat untuk item berdasarkan nilai dalam bidang DateTimeOffset. Misalnya, item dengan tanggal yang lebih baru dapat diberi peringkat lebih tinggi dari item yang lebih lama.

Dimungkinkan juga untuk memberi peringkat item seperti acara kalender dengan tanggal mendatang sehingga item yang lebih dekat dengan masa sekarang dapat diberi peringkat lebih tinggi daripada item di masa mendatang.

Dalam rilis layanan saat ini, salah satu ujung rentang akan ditetapkan ke waktu saat ini. Ujung lainnya adalah waktu di masa lalu berdasarkan boostingDuration. Untuk meningkatkan rentang waktu di masa mendatang, gunakan boostingDuration negatif.

Tingkat di mana peningkatan perubahan dari rentang maksimum dan minimum ditentukan oleh Interpolasi yang diterapkan pada profil penilaian (lihat gambar di bawah). Untuk membalikkan faktor peningkatan yang diterapkan, pilih faktor peningkatan kurang dari 1.
functions > freshness > boostingDuration Menetapkan periode kedaluwarsa, setelah itu peningkatan akan berhenti untuk dokumen tertentu. Lihat Mengatur boostingDuration di bagian berikut untuk sintaks dan contoh.
functions > distance Fungsi penilaian jarak digunakan untuk memengaruhi skor dokumen berdasarkan seberapa dekat atau jauh jaraknya relatif terhadap lokasi geografis referensi. Lokasi referensi diberikan sebagai bagian dari kueri dalam parameter (menggunakan parameter kueri scoringParameter) sebagai argumen lon,lat.
functions > distance > referencePointParameter Parameter yang akan diteruskan dalam kueri yang akan digunakan sebagai lokasi referensi (menggunakan parameter kueri scoringParameter). Lihat Dokumen Pencarian (REST API) untuk deskripsi parameter kueri.
functions > distance > boostingDistance Angka yang menunjukkan jarak dalam kilometer dari lokasi referensi di mana rentang peningkatan berakhir.
functions > tag Fungsi penilaian tag digunakan untuk memengaruhi skor dokumen berdasarkan tag dalam dokumen dan kueri pencarian. Dokumen yang memiliki kesamaan tag dengan kueri pencarian akan ditingkatkan. Tag untuk kueri pencarian disediakan sebagai parameter penilaian di setiap permintaan pencarian (menggunakan parameter kueri scoringParameter).
functions > tag > tagsParameter Parameter yang akan diteruskan dalam kueri untuk menentukan tag untuk permintaan tertentu (menggunakan parameter kueri scoringParameter). Lihat Dokumen Pencarian (REST API) untuk deskripsi parameter kueri.
functions > functionAggregation Opsional. Hanya berlaku ketika fungsi ditentukan. Nilai yang valid meliputi: jumlah (default), rata-rata, minimum, maksimum, dan firstMatching. Skor pencarian adalah nilai tunggal yang dihitung dari beberapa variabel, termasuk beberapa fungsi. Atribut ini menunjukkan bagaimana peningkatan semua fungsi digabungkan menjadi satu peningkatan agregat yang kemudian diterapkan pada skor dokumen dasar. Skor dasar didasarkan pada nilai tf-idf yang dihitung dari dokumen dan kueri pencarian.
defaultScoringProfile Saat menjalankan permintaan pencarian, jika tidak ada profil penilaian yang ditentukan, maka penilaian default akan digunakan (hanya tf-idf).

Anda dapat mengganti default bawaan, mengganti profil kustom sebagai yang digunakan ketika tidak ada profil tertentu yang diberikan dalam permintaan pencarian.

Mengatur interpolasi

Interpolasi memungkinkan Anda mengatur bentuk kemiringan yang digunakan untuk penilaian. Karena penilaiannya tinggi ke rendah, kemiringan selalu menurun, tetapi interpolasinya menentukan kurva kemiringan turun. Interpolasi berikut dapat digunakan:

Interpolasi Deskripsi
linear Untuk item yang berada dalam rentang maks dan min, peningkatan yang diterapkan pada item akan dilakukan dalam jumlah yang terus menurun. Linear adalah interpolasi default untuk profil penilaian.
constant Untuk item yang berada dalam rentang awal dan akhir, peningkatan konstan akan diterapkan ke hasil peringkat.
quadratic Dibandingkan dengan interpolasi Linear yang memiliki peningkatan yang terus menurun, Kuadrat awalnya akan menurun pada kecepatan yang lebih kecil kemudian saat mendekati rentang akhir, ini akan menurun pada interval yang jauh lebih tinggi. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.
logarithmic Dibandingkan dengan interpolasi Linear yang memiliki peningkatan yang terus menurun, Logaritma awalnya akan menurun pada kecepatan yang lebih tinggi kemudian saat mendekati rentang akhir, ini akan menurun pada interval yang jauh lebih kecil. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.

Baris konstanta, linear, kuadrat, log10 pada grafik

Mengatur boostingDuration

boostingDuration adalah atribut fungsi freshness. Anda menggunakannya untuk menetapkan periode kedaluwarsa, setelah itu peningkatan akan berhenti untuk dokumen tertentu. Misalnya, untuk meningkatkan lini produk atau merek untuk periode promosi 10 hari, Anda akan menentukan periode 10 hari sebagai "P10D" untuk dokumen tersebut.

boostingDuration harus diformat sebagai nilai “dayTimeDuration” XSD (subset terbatas dari nilai durasi ISO 8601). Pola untuk ini adalah: "P[nD][T[nH][nM][nS]]".

Tabel berikut ini menyediakan beberapa contoh.

Durasi boostingDuration
1 hari "P1D"
2 hari dan 12 jam "P2DT12H"
15 menit "PT15M"
30 hari, 5 jam, 10 menit, dan 6,334 detik "P30DT5H10M6.334S"

Untuk contoh selengkapnya, lihat Skema XML: Jenis data (situs web W3.org).

Lihat juga