Bagikan melalui


Menambahkan profil penilaian untuk meningkatkan skor pencarian

Profil penilaian digunakan untuk meningkatkan atau menekan peringkat dokumen yang cocok berdasarkan kriteria yang ditentukan pengguna. Dalam artikel ini, pelajari cara menentukan dan menetapkan profil penilaian yang meningkatkan skor pencarian berdasarkan parameter yang Anda berikan. Anda dapat membuat profil penilaian berdasarkan:

  • Bidang string berbobot, di mana penguatan didasarkan pada kecocokan yang ditemukan di bidang yang ditunjuk. Misalnya, kecocokan yang ditemukan di bidang "Subjek" dianggap lebih relevan daripada kecocokan yang sama yang ditemukan di bidang "Deskripsi".

  • Fungsi untuk bidang numerik, termasuk tanggal dan koordinat geografis. Fungsi untuk konten numerik mendukung peningkatan jarak (berlaku untuk koordinat geografis), kesegaran (berlaku untuk bidang tanggalwaktu), rentang, dan besaran.

  • Fungsi untuk koleksi string (tag). Fungsi tag meningkatkan skor pencarian dokumen jika ada item dalam koleksi yang cocok dengan kueri.

  • (pratinjau) Agregasi penambah performa yang berbeda. Dalam satu profil penilaian, Anda dapat menentukan beberapa fungsi penilaian, lalu mengatur "functionAggregation": "product". Dokumen yang skornya sangat tinggi di semua fungsi diprioritaskan, sementara yang skornya lemah dalam satu atau beberapa bidang ditekan.

Anda dapat menambahkan profil penilaian ke indeks dengan mengedit definisi JSON-nya di portal Microsoft Azure atau secara terprogram melalui API seperti Membuat atau Memperbarui INDEKS REST atau API pembaruan indeks yang setara di Azure SDK apa pun. Tidak ada persyaratan pembangunan ulang indeks sehingga Anda dapat menambahkan, memodifikasi, atau menghapus profil penilaian tanpa berpengaruh pada dokumen yang diindeks.

Pada akhir artikel ini, Anda dapat membuat dan menerapkan profil penilaian untuk meningkatkan relevansi pencarian berdasarkan bobot bidang, kesegaran, jarak, atau kriteria kustom.

Prerequisites

  • Sebuah langganan Azure. Buat akun gratis.

  • Azure AI layanan Pencarian. Buat layanan atau temukan layanan yang sudah ada.

  • Indeks pencarian dengan bidang teks atau numerik (nonvector).

  • Izin: Anda memerlukan Kontributor Data Indeks Pencarian untuk membuat atau memperbarui indeks dengan profil penilaian. Untuk mengkueri menggunakan profil penilaian, Anda memerlukan Pembaca Data Indeks Pencarian. Untuk informasi selengkapnya, lihat Menyambungkan menggunakan peran.

  • Penginstalan SDK (opsional):

    • Python: pip install azure-search-documents
    • C#: dotnet add package Azure.Search.Documents

Tip

Untuk contoh kode langsung, lewati ke Definisi profil penilaian.

Aturan untuk profil pemeringkatan

Anda dapat menggunakan profil penilaian dalam pencarian kata kunci, pencarian vektor, pencarian hibrid, dan dengan reranking semantik). Namun, profil penilaian hanya berlaku untuk bidang nonvektor, jadi pastikan indeks Anda memiliki teks atau bidang numerik yang dapat didorong atau ditimbang.

Anda dapat memiliki hingga 100 profil penilaian dalam indeks (lihat Batas layanan), tetapi Anda hanya dapat menentukan satu profil pada satu waktu dalam kueri tertentu.

Anda dapat menggunakan peringkat semantik dengan profil penilaian dan menerapkan profil penilaian setelah peringkat semantik terjadi. Jika tidak, ketika beberapa fitur peringkat atau relevansi sedang diterapkan, peringkat semantik adalah langkah terakhir. Cara kerja penilaian pencarian memberikan ilustrasi urutan operasi.

Aturan tambahan berlaku khusus untuk fungsi.

Note

Tidak terbiasa dengan konsep relevansi? Kunjungi Relevansi dan penilaian di Azure AI Cari latar belakang. Anda juga dapat menonton segmen video ini di YouTube untuk profil penilaian atas hasil peringkat BM25.

Definisi profil penilaian

Profil penilaian ditentukan dalam skema indeks. Ini terdiri dari bidang tertimbang, fungsi, dan parameter.

Definisi berikut menunjukkan profil sederhana bernama "geo". Contoh ini meningkatkan hasil yang memiliki istilah pencarian di bidang hotelName. Ini juga menggunakan distance fungsi untuk mendukung hasil yang berada dalam jarak 10 kilometer dari lokasi saat ini. Jika seseorang mencari pada istilah 'penginapan', dan 'penginapan' kebetulan menjadi bagian dari nama hotel, dokumen yang mencakup hotel dengan 'penginapan' dalam radius 10 kilometer dari lokasi saat ini muncul 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
        }                        
      }                                      
    ]                     
  }            
]

Referensi: scoringProfiles | scoringFunction | fungsi jarak

Untuk menggunakan profil penilaian ini, kueri Anda diformulasikan untuk menentukan scoringProfile parameter dalam permintaan. Jika Anda menggunakan REST API, kueri ditentukan melalui permintaan GET dan POST. Dalam contoh berikut, "currentLocation" memiliki pemisah satu tanda hubung (-). Ini diikuti oleh koordinat bujur dan lintang, di mana bujur adalah nilai negatif.

POST /indexes/hotels/docs&api-version=2025-09-01
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Referensi: Search Documents (REST) | scoringProfile parameter | scoringParameters

Parameter kueri, termasuk scoringParameters, dijelaskan dalam Dokumen Pencarian (REST API).

Untuk skenario selengkapnya, lihat contoh kesegaran dan jarak sertateks dan fungsi tertimbang dalam artikel ini.

Kueri dengan profil penilaian menggunakan SDK

import os
from azure.identity import DefaultAzureCredential
from azure.search.documents import SearchClient

# Set up the client
endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
index_name = "hotels"
credential = DefaultAzureCredential()

client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)

# Execute search with scoring profile
results = client.search(
    search_text="inn",
    scoring_profile="geo",
    scoring_parameters=["currentLocation--122.123,44.77233"],
    select=["HotelName", "Description", "Rating"]
)

for result in results:
    print(f"{result['HotelName']} (Score: {result['@search.score']})")

Referensi: SearchClient.search | Parameter scoring_profile

Menambahkan profil penilaian ke indeks pencarian

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

  2. Tempelkan templat yang disediakan dalam artikel ini.

  3. Berikan nama yang mematuhi konvensi penamaan.

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

Anda harus bekerja secara berulang, menggunakan himpunan data yang membantu Anda membuktikan atau membantah kemanjuran profil tertentu.

Profil penilaian dapat ditentukan di portal Microsoft Azure seperti yang ditunjukkan pada cuplikan layar berikut, atau secara terprogram melalui REST API atau di Azure SDK, seperti kelas ScoringProfile di pustaka klien .NET atau Python .

Cuplikan layar memperlihatkan opsi Tambahkan profil penilaian di portal Microsoft Azure.

Template

Bagian ini memperlihatkan sintaksis dan templat untuk mencetak profil. Untuk deskripsi properti, lihat referensi REST API.

"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) "...", 

Menggunakan bidang tertimbang teks

Gunakan bidang berbobot teks saat konteks bidang penting dan kueri menyertakan searchable bidang string. Misalnya, jika kueri menyertakan istilah "bandara", Anda mungkin mendukung "bandara" di bidang HotelName daripada bidang Deskripsi.

Bidang tertimbang adalah pasangan nilai nama yang searchable terdiri dari bidang 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": "boostSearchTerms",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

Gunakan fungsi

Gunakan fungsi ketika bobot relatif sederhana tidak mencukupi atau tidak berlaku, seperti halnya jarak dan kesegaran, yang merupakan perhitungan atas data numerik. Anda dapat menentukan beberapa fungsi per profil penilaian. Untuk informasi selengkapnya tentang jenis data EDM yang digunakan dalam Pencarian Azure AI, lihat Jenis data yang didukung.

Function Description Kasus penggunaan
distance Tingkatkan berdasarkan kedekatan atau lokasi geografis. Fungsi ini hanya dapat digunakan dengan bidang Edm.GeographyPoint. Gunakan untuk skenario "temukan di dekat saya".
freshness Tingkatkan menurut nilai dalam bidang datetime (Edm.DateTimeOffset). Atur boostingDuration untuk menentukan nilai yang mewakili rentang waktu di mana peningkatan terjadi. Gunakan saat Anda ingin mempromosikan tanggal terbaru (yang lebih baru). Anda juga dapat memajukan item seperti acara kalender dengan tanggal mendatang agar lebih dekat dengan waktu sekarang, dibandingkan dengan item yang lebih jauh ke masa depan. Salah satu akhir rentang diperbaiki ke waktu saat ini.
magnitude Besarnya adalah jarak komputasi antara nilai dokumen (seperti tanggal atau lokasi) dan titik referensi (seperti "sekarang" atau lokasi target). Ini adalah input ke fungsi penilaian dan menentukan berapa banyak peningkatan yang diterapkan. Mengubah peringkat berdasarkan rentang nilai untuk bidang numerik. 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. 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. Gunakan saat Anda ingin meningkatkan berdasarkan margin laba, peringkat, jumlah klik-jalan, jumlah unduhan, harga tertinggi, harga terendah, atau hitungan unduhan. Ketika dua item relevan, item dengan peringkat yang lebih tinggi ditampilkan terlebih dahulu.
beri tanda Tingkatkan menurut tag yang umum untuk dokumen pencarian dan string kueri. Tag disediakan dalam tagsParameter. Fungsi ini hanya dapat digunakan dengan bidang pencarian jenis Edm.String dan Collection(Edm.String). Gunakan saat Anda memiliki bidang tag. Jika tag tertentu dalam daftar itu sendiri adalah daftar yang dibatasi koma, Anda dapat menggunakan normalizer teks pada bidang untuk menghapus koma pada waktu kueri (memetakan karakter koma ke spasi). Pendekatan ini "meratakan" daftar sehingga semua istilah adalah string panjang tunggal dari istilah yang dibatasi koma.

Penilaian kesegaran dan jarak adalah kasus khusus penilaian berbasis besaran, di mana besarannya secara otomatis dihitung dari bidang tanggalwaktu atau geografis.

Aturan untuk menggunakan fungsi

  • Fungsi hanya dapat diterapkan ke bidang yang dikaitkan sebagai filterable.
  • Jenis fungsi ("freshness", "magnitude", "distance", "tag") harus huruf kecil.
  • Fungsi tidak dapat menyertakan nilai null atau kosong.
  • Fungsi hanya dapat memiliki satu bidang per definisi fungsi. Untuk menggunakan besaran dua kali dalam profil yang sama, berikan besaran dua definisi, satu untuk setiap bidang.

Mengatur interpolasi

Interpolasi mengatur bentuk lereng yang digunakan untuk meningkatkan kesegaran dan jarak. Karena penilaian tinggi hingga rendah, kelereng selalu menurun, tetapi interpolasi menentukan kurva kelereng ke bawah dan seberapa agresif skor peningkatan berubah saat tanggal dokumen semakin tua.

Interpolation Description
linear Untuk item yang berada dalam rentang maks dan min, peningkatan diterapkan dalam jumlah yang terus menurun. Disarankan ketika Anda menginginkan penurunan bertahap terhadap relevansi. Linear adalah interpolasi default untuk profil penilaian.
constant Untuk item yang berada dalam rentang awal dan akhir, peningkatan konstanta diterapkan ke hasil peringkat. Gunakan ini saat Anda menginginkan penalti yang tidak berubah tanpa memandang usia.
quadratic Kuadrat awalnya menurun pada kecepatan yang lebih kecil dan kemudian mempercepat saat mendekati rentang akhir, berkurang pada interval yang jauh lebih tinggi. Gunakan interpolasi ini ketika Anda ingin secara tegas memberi prioritas pada dokumen terbaru dan mengurangi kepentingan dokumen yang lebih lama. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.
logarithmic Logaritmik awalnya menurun pada kecepatan yang lebih tinggi dan kemudian saat mendekati rentang akhir, ia berkurang pada interval yang jauh lebih kecil. Disarankan ketika Anda memiliki preferensi yang kuat untuk konten terbaru tetapi kurang sensitivitas seiring bertambahnya usia dokumen. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.

Diagram bentuk kemiringan untuk interpolasi konstanta, linier, logaritmik, dan kuadrat selama rentang 365 hari

Mengatur boostingDuration untuk fungsi kesegaran

boostingDuration adalah atribut fungsi freshness. Anda menggunakannya untuk menentukan jangka waktu kedaluwarsa setelah itu peningkatan 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.

Duration 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"
1 tahun "365D"

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

Contoh: peningkatan berdasarkan kesegaran atau jarak

Bentuk kurva peningkatan (konstanta, linier, logaritmik, kuadrat) mempengaruhi bagaimana skor agresif berubah di seluruh rentang.

Saat menggunakan fungsi kesegaran, jika Anda ingin peningkatan memiliki efek yang lebih dramatis pada tanggal yang lebih baru, pilih interpolasi kuadrat. Kuadrat memperkuat efek tanggal dekat baru-baru ini dan lokasi yang lebih dekat dan merunting lebih lambat di ujung rentang. Sebaliknya, kurva logaritma bergeser lebih tajam di ujung jauh.

Berikut adalah contoh profil penilaian yang menunjukkan cara meningkatkan kesegaran.

{
    "name": "docs-index",
    "fields": [
      { "name": "id", "type": "Edm.String", "key": true, "filterable": true },
      { "name": "title", "type": "Edm.String", "searchable": true },
      { "name": "content", "type": "Edm.String", "searchable": true },
      { "name": "lastUpdated", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true }
    ],
    "scoringProfiles": [
      {
        "name": "freshnessBoost",
        "text": {
          "weights": {
            "content": 1.0
          }
        },
        "functions": [
          {
            "type": "freshness",
            "fieldName": "lastUpdated",
            "boost": 2.0,
            "interpolation": "quadratic",
            "parameters": {
              "boostingDuration": "365D"
            }
          }
        ]
    }
  ]
}
  • Fungsi ini freshness menghitung besaran dari "sekarang" ke lastUpdated.
  • Peningkatan positif dengan interpolasi kuadrat meningkatkan daya angkat untuk tanggal terbaru, dengan cepat berkurang untuk tanggal yang lebih lama.
  • "boostingDuration": "365D" menentukan jendela waktu di mana kesegaran dievaluasi, misalnya memprioritaskan dokumen yang bertanggal dalam tahun terakhir.
  • "interpolation": "quadratic" berarti efek peningkatan lebih kuat untuk dokumen yang lebih dekat dengan tanggal saat ini dan meruncing lebih tajam untuk dokumen yang lebih lama.

Dalam contoh berikutnya, interpolasi linier menyediakan preferensi yang stabil untuk konten terbaru di seluruh jendela 30 hari. Tingkatkan boost apabila sinyal perlu mengungguli faktor relevansi lainnya.

{
  "name": "freshness30_linear",
  "functions": [
    {
      "type": "freshness",
      "fieldName": "lastUpdated",
      "boost": 3.0,
      "interpolation": "linear",
      "parameters": { "boostingDuration": "P30D" }
    }
  ]
}

Referensi: fungsi kesegaran | boostingDuration

Contoh: peningkatan melalui teks dan fungsi tertimbang

Tip

Lihat posting blog dan notebook ini untuk demonstrasi menggunakan profil penilaian dan peningkatan dokumen dalam skenario AI vektor dan generatif.

Contoh ini memperlihatkan skema indeks dengan dua profil penilaian (boostGenre, newAndHighlyRated). Setiap kueri terhadap indeks ini yang menyertakan salah satu profil sebagai parameter kueri menggunakan profil untuk menilai kumpulan 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' di musicstoreindex), Anda mungkin memerlukan varians yang lebih besar dalam bobot relatif. Misalnya, dalam musicstoreindex, 'rock' muncul sebagai genre dan dalam deskripsi genre yang diungkapkan secara identik. Jika Anda ingin genre melebihi deskripsi genre, bidang genre 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  
          }  
        }  
      ]  
    }  
  ]
}  

Contoh: agregasi fungsi

Note

Kemampuan ini saat ini dalam pratinjau, tersedia melalui REST API pratinjau 2025-11-01 dan dalam paket pratinjau Azure SDK yang menyediakan fitur tersebut.

Dalam satu profil penilaian, Anda dapat menentukan beberapa fungsi penilaian, lalu mengatur "functionAggregation": "product". Dokumen yang skornya sangat tinggi di semua fungsi diprioritaskan, sementara yang skornya lemah dalam satu atau beberapa bidang ditekan.

Dalam contoh ini, buat profil penilaian yang mencakup dua fungsi peningkatan yang menguatkan dengan rating dan baseRate, lalu atur functionAggregation ke product.

### Create a new index
PUT {{url}}/indexes/hotels-scoring?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{key}}

{
    "name": "hotels-scoring",  
    "fields": [
        {"name": "HotelId", "type": "Edm.String", "key": true, "filterable": true, "facetable": true},
        {"name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": true},
        {"name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": true, "analyzer": "en.lucene"},
        {"name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
        {"name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true},
        {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true},
        {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true},
        {"name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true},
        {"name": "BaseRate", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
        {"name": "Address", "type": "Edm.ComplexType", 
            "fields": [
            {"name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": true, "searchable": true},
            {"name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
            {"name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true},
            {"name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true}
            ]
        }
    ],
    "scoringProfiles": [
        {
            "name": "productAggregationProfile",
            "functions": [
                {
                    "type": "magnitude",
                    "fieldName": "Rating",
                    "boost": 2.0,
                    "interpolation": "linear",
                    "magnitude": {
                        "boostingRangeStart": 1.0,
                        "boostingRangeEnd": 5.0,
                        "constantBoostBeyondRange": false
                    }
                },
                {
                    "type": "magnitude",
                    "fieldName": "BaseRate",
                    "boost": 1.5,
                    "interpolation": "linear",
                    "magnitude": {
                        "boostingRangeStart": 50.0,
                        "boostingRangeEnd": 400.0,
                        "constantBoostBeyondRange": false
                    }
                }
            ],
            "functionAggregation": "product"
        }
    ],
    "defaultScoringProfile": "productAggregationProfile"
}

Permintaan berikutnya ini memuat indeks dengan konten yang dapat dicari yang menguji profil.

### Upload documents to the index
POST {{url}}/indexes/hotels-scoring/docs/index?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{key}}

  {
        "value": [
        {
        "@search.action": "upload",
        "HotelId": "1",
        "HotelName": "Stay-Kay City Hotel",
        "Description": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times 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": [ "view", "air conditioning", "concierge" ],
        "ParkingIncluded": false,
        "LastRenovationDate": "2022-01-18T00:00:00Z",
        "Rating": 3.60,
        "BaseRate": 200.0,
        "Address": 
            {
            "StreetAddress": "677 5th Ave",
            "City": "New York",
            "StateProvince": "NY",
            "PostalCode": "10022"
            } 
        },
        {
        "@search.action": "upload",
        "HotelId": "2",
        "HotelName": "Old Century Hotel",
        "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.",
         "Category": "Boutique",
        "Tags": [ "pool", "free wifi", "concierge" ],
        "ParkingIncluded": false,
        "LastRenovationDate": "2019-02-18T00:00:00Z",
        "Rating": 3.60,
        "BaseRate": 150.0,
        "Address": 
            {
            "StreetAddress": "140 University Town Center Dr",
            "City": "Sarasota",
            "StateProvince": "FL",
            "PostalCode": "34243"
            } 
        },
        {
        "@search.action": "upload",
        "HotelId": "3",
        "HotelName": "Gastronomic Landscape Hotel",
        "Description": "The Gastronomic Landscape Hotel stands out for its culinary excellence under the management of William Dough, who advises on and oversees all of the Hotel’s restaurant services.",
        "Category": "Suite",
        "Tags": [ "restaurant", "bar", "continental breakfast" ],
        "ParkingIncluded": true,
        "LastRenovationDate": "2015-09-20T00:00:00Z",
        "Rating": 4.80,
        "BaseRate": 350.0,
        "Address": 
            {
            "StreetAddress": "3393 Peachtree Rd",
            "City": "Atlanta",
            "StateProvince": "GA",
            "PostalCode": "30326"
            } 
        },
        {
        "@search.action": "upload",
        "HotelId": "4",
        "HotelName": "Sublime Palace Hotel",
        "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.",
        "Tags": [ "concierge", "view", "air conditioning" ],
        "ParkingIncluded": true,
        "LastRenovationDate": "2020-02-06T00:00:00Z",
        "Rating": 4.60,
        "BaseRate": 275.0,
        "Address": 
            {
            "StreetAddress": "7400 San Pedro Ave",
            "City": "San Antonio",
            "StateProvince": "TX",
            "PostalCode": "78216"
            }
        }
    ]
}

Jalankan kueri yang menggunakan kriteria dalam profil pemeringkatan untuk memperkuat hasil berdasarkan peringkat tinggi dan tingkat dasar yang tinggi. Nilai penguatan dikumpulkan untuk lebih memajukan hasil yang memperoleh nilai tinggi dalam kedua fungsi.

### Search with boost
POST {{url}}/indexes/hotels-scoring/docs/search?api-version=2025-11-01-preview
Content-Type: application/json
api-key: {{key}}

{
    "search": "expensive and good hotels",
    "count": true,
    "select": "HotelId, HotelName, Description, Rating, BaseRate",
    "scoringProfile": "productAggregationProfile"
}

Respons teratas untuk kueri ini adalah "Gastronomic Landscape Hotel" dengan skor pencarian yang hampir dua kali lebih tinggi dari kecocokan terdekat berikutnya. Hotel khusus ini memiliki peringkat tertinggi dan tarif dasar tertinggi, sehingga penggabungan kedua fungsi menempatkan kecocokan ini ke puncak.

{
  "@odata.count": 4,
  "value": [
    {
      "@search.score": 1.0541908,
      "HotelId": "3",
      "HotelName": "Gastronomic Landscape Hotel",
      "Description": "The Gastronomic Hotel stands out for its culinary excellence under the management of William Dough, who advises on and oversees all of the Hotel\u2019s restaurant services.",
      "Rating": 4.8,
      "BaseRate": 350.0
    },
    {
      "@search.score": 0.53451097,
      "HotelId": "2",
      "HotelName": "Old Century Hotel",
      "Description": "The hotel is situated in a nineteenth century plaza, which has been expanded and renovated to the highest architectural standards to create a modern, functional and first-class hotel in which art and unique historical elements coexist with the most modern comforts. The hotel also regularly hosts events like wine tastings, beer dinners, and live music.",
      "Rating": 3.6,
      "BaseRate": 150.0
    },
    {
      "@search.score": 0.53185254,
      "HotelId": "1",
      "HotelName": "Stay-Kay City Hotel",
      "Description": "This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times 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.",
      "Rating": 3.6,
      "BaseRate": 200.0
    },
    {
      "@search.score": 0.44853577,
      "HotelId": "4",
      "HotelName": "Sublime Palace Hotel",
      "Description": "Sublime Palace Hotel is located in the heart of the historic center of Sublime in an extremely vibrant and lively area within short walking distance to the sites and landmarks of the city and is surrounded by the extraordinary beauty of churches, buildings, shops and monuments. Sublime Cliff is part of a lovingly restored 19th century resort, updated for every modern convenience.",
      "Rating": 4.6,
      "BaseRate": 275.0
    }
  ]
}

Tips penyetelan

  • Mulai konservatif: tingkatkan dalam rentang 1,25–2,0; tingkatkan hanya jika kejadian terkini benar-benar menentukan.

  • Ukuran jendela: Gunakan P30D untuk konten terbaru, P90D/P180D untuk konten agak baru, P365D untuk long-tail.

  • Pilihan interpolasi:

    • Quadratic saat Anda menginginkan dorongan yang kuat ke data terbaru.
    • linear saat Anda menginginkan gradien yang stabil.
    • logaritma ketika Anda menginginkan pilihan yang lembut.
  • Agregasi: Jika menggabungkan beberapa fungsi, jumlah paling mudah; beralih ke maks saat Anda ingin satu sinyal mendominasi

Memecahkan masalah profil pemeringkatan

Gunakan tabel berikut untuk mendiagnosis masalah umum dengan profil penilaian.

Masalah Kemungkinan penyebab Resolusi
Profil penilaian tidak diterapkan Nama profil tidak ditentukan dalam kueri Tambahkan scoringProfile parameter ke permintaan pencarian Anda dengan nama profil yang tepat.
Tidak ada efek peningkatan yang diamati Bidang tidak ditandai sebagai filterable Fungsi hanya dapat diterapkan ke bidang yang diatribusikan sebagai filterable. Perbarui skema indeks Anda.
Hasil peringkat tak terduga Nilai peningkatan terlalu tinggi atau terlalu rendah Mulailah dengan meningkatkan nilai dalam rentang 1,25–2,0 dan sesuaikan berdasarkan pengujian.
Pembaruan tidak meningkatkan dokumen terbaru boostingDuration format terlalu pendek atau salah Verifikasi format durasi (misalnya, "P30D" selama 30 hari) dan perpanjang jendela jika diperlukan.
Fungsi jarak tidak berfungsi Bidang tidak adalah Edm.GeographyPoint Fungsi jarak hanya berfungsi dengan Edm.GeographyPoint kolom.
Fungsi tag tidak mengembalikan peningkatan Tag tidak cocok dengan nilai kueri Verifikasi apakah tagsParameter sesuai dengan nilai dalam scoringParameters permintaan pencarian.
Profil ada tetapi kueri gagal Nama bidang tidak valid di profil Pastikan semua nama bidang dalam profil penilaian ada dalam skema indeks.