Přidání hodnoticích profilů pro zvýšení skóre hledání

Note

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Profily bodování se používají k posílení nebo potlačení řazení odpovídajících dokumentů na základě uživatelsky definovaných kritérií. V tomto článku se dozvíte, jak určit a přiřadit bodovací profil, který zvýší skóre hledání na základě zadaných parametrů. Profily bodování můžete vytvořit na základě:

  • Vážená řetězcová pole, ve kterých je zvýšení hodnocení založeno na shodě nalezené v určeném poli. Například shody nalezené v poli Předmět jsou považovány za relevantnější než stejná shoda nalezená v poli Popis.

  • Funkce pro číselná pole, včetně kalendářních dat a zeměpisných souřadnic. Funkce pro číselný obsah podporují zvýšení vzdálenosti (platí pro geografické souřadnice), aktuálnost (platí pro pole data a času), rozsah a velikost.

  • Funkce pro kolekce řetězců (značky). Funkce značek zvýší skóre hledání dokumentu, pokud se dotaz shoduje s některou položkou v kolekci.

  • (Preview) Agregace jedinečných vylepšení. V jednom bodovacím profilu můžete zadat více hodnoticího funkce a pak nastavit "functionAggregation": "product". Dokumenty, které mají vysoké skóre napříč všemi funkcemi, jsou upřednostňovány, zatímco ty, které jsou slabé v jednom nebo více polích, jsou potlačeny.

Profil bodování můžete do indexu přidat úpravou jeho definice JSON v Azure portálu nebo programově prostřednictvím rozhraní API, jako je Vytvořit nebo aktualizovat index REST nebo v libovolné sadě Azure SDK ekvivalentními rozhraními API pro aktualizaci indexu. Neexistují žádné požadavky na opětovné sestavení indexu, abyste mohli přidávat, upravovat nebo odstraňovat profil bodování bez vlivu na indexované dokumenty.

Na konci tohoto článku můžete vytvořit a použít profily bodování pro zvýšení relevance hledání na základě váhy polí, aktuálnosti, vzdálenosti nebo vlastních kritérií.

Prerequisites

  • Předplatné služby Azure. Vytvořte si ho zdarma.

  • Služba Azure AI Vyhledávač. Vytvořte službu nebo vyhledejte existující službu.

  • Vyhledávací index s textovými nebo číselnými (nevektorovými) poli.

  • Oprávnění: K vytvoření nebo aktualizaci indexu pomocí hodnoticího profilu potřebujete Přispěvatel dat indexu vyhledávání . K dotazování pomocí bodovacího profilu potřebujete čtečku dat indexu vyhledávání. Další informace najdete v tématu Připojení pomocí rolí.

  • Instalace sady SDK (volitelné):

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

Tip

V případě okamžitých příkladů kódu přejděte k definici hodnoticího profilu.

Pravidla pro bodovací profily

Profily bodování můžete použít ve vyhledávání klíčových slov, vektorovém vyhledávání, hybridním vyhledávání a sémantikovém rerankingu). Profily bodování se ale vztahují pouze na nevektorová pole, proto se ujistěte, že index obsahuje textová nebo číselná pole, která se dají posílit nebo ohodnotit váhou.

V indexu můžete mít až 100 profilů bodování (viz limity služby), ale v libovolném dotazu můžete zadat pouze jeden profil najednou.

Sémantické řazení můžete použít s bodovacími profily a po sémantickém řazení aplikovat profil bodování. Jinak platí, že pokud je použito více funkcí řazení nebo relevance, je sémantické hodnocení posledním krokem. Jak funguje bodování hledání poskytuje ilustraci pořadí operací.

Další pravidla platí speciálně pro funkce.

Note

Neznáte koncepty relevance? Navštivte Relevance a skórování ve službě Azure AI Vyhledávač pro další informace. Můžete se také podívat na tento segment videa na YouTube , kde najdete profily bodování nad výsledky seřazené podle BM25.

Definice bodujícího profilu

Profil bodování je definován ve schématu indexu. Skládá se z vážených polí, funkcí a parametrů.

Následující definice ukazuje jednoduchý profil s názvem "geo". Tento příklad zvýší výsledky, které mají hledaný termín v poli hotelName. Používá také distance funkci k upřednostnění výsledků, které jsou v okruhu 10 kilometrů od aktuálního umístění. Pokud někdo hledá termín "inn" a "inn" je součástí názvu hotelu, dokumenty, které zahrnují hotely s "inn" v okruhu 10 kilometrů od aktuální polohy, se ve výsledcích hledání zobrazí výše.

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

Referenční informace: scoringProfiles | scoringFunction | distance function

Pokud chcete použít tento bodovací profil, váš dotaz se formuluje tak, aby specifikoval scoringProfile parametr v požadavku. Pokud používáte rozhraní REST API, dotazy se zadají prostřednictvím požadavků GET a POST. V následujícím příkladu má "currentLocation" oddělovač jediné pomlčky (-). Následuje souřadnice zeměpisné délky a zeměpisné šířky, kde zeměpisná délka je záporná hodnota.

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

Reference: Vyhledávání dokumentů (REST) | scoringProfile parametr | scoringParameters

Parametry dotazu, včetně scoringParameters, jsou popsány v rozhraní REST API (Search Documents).

Další scénáře najdete v příkladech aktuálnosti a vzdálenosti a váženého textu a funkcí v tomto článku.

Dotazování s použitím hodnoticího profilu přes sady 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']})")

Referenční informace: SearchClient.search | parametr scoring_profile

Přidání hodnoticího profilu do indexu vyhledávání

  1. Začněte definicí indexu. Profily bodování můžete přidat a aktualizovat v existujícím indexu, aniž byste je museli znovu sestavit. Pomocí funkce Získat index můžete stáhnout existující index a pomocí žádosti o vytvoření nebo aktualizaci indexu publikovat revizi.

  2. Vložte šablonu uvedenou v tomto článku.

  3. Zadejte název, který dodržuje zásady vytváření názvů.

  4. Zadejte kritéria zvýšení. Jeden profil může obsahovat textová vážená pole, funkce nebo obojí.

Měli byste pracovat iterativním způsobem pomocí datové sady, která vám pomůže prokázat nebo vyvrátit účinnost daného profilu.

Profily bodování je možné definovat na webu Azure Portal, jak je znázorněno na následujícím snímku obrazovky, nebo programově prostřednictvím rozhraní REST API nebo v sadách Azure SDK, jako je třída ScoringProfile v klientských knihovnách .NET nebo Python .

Snímek obrazovky znázorňující možnost Přidat bodovací profil na webu Azure Portal

Template

Tato část ukazuje syntaxi a šablonu pro bodovací profily. Popis vlastností najdete v referenčních informacích k rozhraní 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) "...", 

Použití textových polí s váhou

Textově vážená pole používejte, pokud je kontext pole důležitý a dotazy obsahují searchable řetězcová pole. Pokud například dotaz obsahuje termín "letiště", můžete místo pole Popis upřednostňovat "letiště" v poli HotelName.

Vážená pole jsou dvojice název-hodnota, které jsou složené z searchable pole a kladného čísla, které se používá jako násobitel. Pokud je původní skóre pole HotelName 3, zvýší se skóre pro toto pole 6, což přispívá k vyššímu celkovému skóre pro samotný nadřazený dokument.

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

Použití funkcí

Funkce používejte, pokud jsou jednoduché relativní váhy nedostatečné nebo se nepoužívají, stejně jako v případě vzdálenosti a aktuálnosti, což jsou výpočty s číselnými daty. Pro každý bodovací profil můžete zadat více funkcí. Další informace o datových typech EDM používaných ve službě Azure AI Vyhledávač najdete v tématu Podporované datové typy.

Function Description Případy použití
distance Zvýšení na základě blízkosti nebo geografické polohy. Tuto funkci lze použít pouze s Edm.GeographyPoint poli. Používá se ve scénářích "najít poblíž mě".
freshness Zvýšení pomocí hodnot v poli datetime (Edm.DateTimeOffset). Nastavte boostingDuration pro určení hodnoty představující časový interval, při kterém dochází ke zvýšení. Použijte, když chcete zvýhodnit (novější) data. Můžete také posílit položky, jako jsou události kalendáře s budoucími daty, které jsou blíže současnosti, ve srovnání s těmi, které jsou dále v budoucnosti. Jeden konec rozsahu je pevně nastaven na aktuální čas.
magnitude Velikost je vypočítaná vzdálenost mezi hodnotou dokumentu (například datem nebo umístěním) a referenčním bodem (například "nyní" nebo cílovým umístěním). Je to vstup do hodnotící funkce a určuje, jak velké zvýšení bude aplikováno. Změna pořadí na základě rozsahu hodnot číselného pole Hodnota musí být celé číslo nebo desetinné číslo. U hodnocení hvězdičky 1 až 4 by to bylo 1. U marží přes 50 % by to bylo 50. Tuto funkci lze použít pouze s Edm.Double poli a Edm.Int poli. U funkce velikosti můžete obrátit pořadí, od vysoké po nízkou, pokud chcete inverzní vzor (například zvýhodnit položky s nižší cenou více než položky s vyšší cenou). Vzhledem k rozsahu cen od 100 do 1 00 Kč byste nastavili boostingRangeStart 100 a boostingRangeEnd na 1, aby se zvýšily nižší ceny položek. Použijte, když chcete zvýšit ziskovou marži, hodnocení, počet kliknutí, počet stažení, nejvyšší cenu, nejnižší cenu nebo počet stažení. Pokud jsou relevantní dvě položky, zobrazí se nejprve položka s vyšším hodnocením.
klíčové slovo Zvyšte je o značky, které jsou společné pro hledání dokumentů i řetězců dotazů. Značky jsou k dispozici v souboru tagsParameter. Tuto funkci lze použít pouze s vyhledávacími poli typu Edm.String a Collection(Edm.String). Použijte tehdy, když máte dostupná pole značek. Pokud je daná značka v seznamu sama o sobě čárkami odděleným seznamem, můžete pomocí normalizátoru textu v poli odstranit čárky v době dotazu (namapovat znak čárky na mezeru). Tento přístup "zploštěl" seznam tak, aby všechny termíny byly jeden dlouhý řetězec termínů oddělených čárkami.

Aktuálnost a bodování vzdálenosti jsou zvláštní případy bodování na základě rozsahu, kdy se velikost automaticky vypočítá z data a času nebo geografického pole.

Pravidla pro používání funkcí

  • Funkce lze použít pouze u polí, která jsou přiřazena jako filterable.
  • Typ funkce ("aktuálnost", "velikost", "vzdálenost", "značka") musí být psán malými písmeny.
  • Funkce nemohou obsahovat hodnoty null ani prázdné hodnoty.
  • Funkce můžou mít pouze jedno pole pro každou definici funkce. Chcete-li použít velikost dvakrát ve stejném profilu, zadejte dvě definice velikost, jednu pro každé pole.

Nastavení interpolací

Interpolace nastavují tvar sklonu použitého pro zvýšení aktuálnosti a vzdálenosti. Protože se bodovací škála posouvá z vysokého na nízké, sklon vždy klesá, ale interpolace určuje křivku tohoto poklesu a to, jak agresivně se mění hodnota vylepšení skóre s tím, jak dokumenty stárnou.

Interpolation Description
linear U položek, které jsou v maximálním a minimálním rozsahu, se zvýšení použije v neustále se snižujícím množství. Je doporučeno, když chcete, aby se relevance postupně snižovala. Lineární je výchozí interpolace pro bodovací profil.
constant U položek, které jsou v počátečním a koncovém rozsahu, se na výsledky pořadí použije konstantní zvýšení. Tuto možnost použijte v případě, že chcete mít plochou pokutu bez ohledu na věk.
quadratic Kvadratický zpočátku klesá menším tempem a pak se zrychluje, když se blíží ke koncovému rozsahu, snižuje se v mnohem vyšším intervalu. Tuto interpolaci použijte, pokud chcete důrazně upřednostnit nejnovější dokumenty a výrazně snížit úroveň starších dokumentů. Tato možnost interpolace není ve funkci vyhodnocování značek povolená.
logarithmic Logaritmická funkce zpočátku klesá rychlejším tempem a pak, jak se blíží k jednotkovému rozsahu, zmenšuje se mnohem pomaleji. Doporučuje se, pokud dáváte přednost velmi aktuálnímu obsahu, ale máte menší citlivost na stárnutí dokumentů. Tato možnost interpolace není ve funkci vyhodnocování značek povolená.

Diagram obrazců sklonu pro konstantní, lineární, logaritmické a kvadratické interpolace v rozsahu 365 dnů

Nastavení boostingDuration pro funkci čerstvosti

boostingDuration je atribut funkce freshness . Použijete ho k nastavení období vypršení platnosti, po kterém se pro konkrétní dokument zastaví zvýšení. Pokud například chcete zvýšit produktovou řadu nebo značku na 10denní propagační období, zadáte pro tyto dokumenty 10denní období jako P10D.

boostingDuration musí být formátována jako hodnota XSD dayTimeDuration (omezená podmnožina hodnoty doby trvání ISO 8601). Vzor pro toto je: "P[nD][T[nH][nM][nS]]".

Následující tabulka obsahuje několik příkladů.

Duration boostingDuration
1 den "P1D"
2 dny a 12 hodin "P2DT12H"
15 minut "PT15M"
30 dní, 5 hodin, 10 minut a 6,334 sekund "P30DT5H10M6.334S"
1 rok "365D"

Další příklady najdete ve schématu XML: Datové typy (W3.org webu).

Příklad: optimalizace podle čerstvosti nebo vzdálenosti

Tvar křivky zvýšení (konstantní, lineární, logaritmická, kvadratická) ovlivňuje, jak agresivně se skóre mění v celém rozsahu.

Při použití funkce aktuálnosti, pokud chcete, aby zvýšení mělo dramatičtější vliv na novější data, zvolte kvadratickou interpolaci. Kvadratické zvyšuje účinek nedávných blízkých dat a bližších míst a postupně se snižuje pomaleji na vzdálenějším konci rozsahu. Naproti tomu se logaritmická křivka zřetelněji přesune v zadní části.

Tady je příklad profil bodování, který ukazuje, jak zvýšit aktuálnost.

{
    "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": "P365D"
            }
          }
        ]
    }
  ]
}
  • Funkce freshness vypočítá velikost od "now" do lastUpdated.
  • Pozitivní impuls využívající kvadratickou interpolaci zvyšuje efekt u nedávných dat a rychle slábne u starších.
  • "boostingDuration": "P365D" definuje časové období, během kterého se vyhodnocuje aktuálnost, například zvýraznění dokumentů datovaných v posledním roce.
  • "interpolation": "quadratic" znamená, že efekt zvýšení je silnější pro dokumenty blíže k aktuálnímu datu a u starších dokumentů výrazněji slábne.

V dalším příkladu poskytuje lineární interpolace stabilní předvolbu pro nejnovější obsah v 30denním okně. Zvyšte posílení, pokud se signál potřebuje prosadit proti jiným relevantním faktorům.

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

Referenční informace: funkce aktuálnosti | boostingDuration

Příklad: Posilování váženého textu a funkcí

Tip

Podívejte se na tento blogový příspěvek a poznámkový blok s ukázkou použití hodnoticích profilů a posílení dokumentů ve scénářích vektoru a generování umělé inteligence.

Následující příklad ukazuje schéma indexu se dvěma profily bodování (boostGenre, newAndHighlyRated). Jakýkoli dotaz na tento index, který obsahuje některý z profilů jako parametr dotazu, používá profil k určení skóre sady výsledků.

Profil boostGenre používá vážená textová pole, posilující shody nalezené v polích albumTitle, žánr a artistName. Pole jsou posíleny 1,5; 5; a 2 v uvedeném pořadí. Proč se žánr zvyšuje mnohem výš než ostatní? Pokud se vyhledávání provádí přes data, která jsou poněkud homogenní (stejně jako v případě "žánru" v musicstoreindex), možná budete potřebovat větší odchylku v relativní hmotnosti. Například v musicstoreindex se "rock" zobrazuje jako žánr i ve identicky frázovaných popisech žánrů. Pokud chcete, aby žánr převažoval nad popisem žánru, pole žánru potřebuje mnohem vyšší relativní váhu.

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

Příklad: agregace funkce

Note

Tato funkce je aktuálně ve verzi Preview, dostupná prostřednictvím rozhraní REST API latest preview a v balíčcích Azure SDK Preview, které tuto funkci poskytují.

V jednom bodovacím profilu můžete zadat více hodnoticího funkce a pak nastavit "functionAggregation": "product". Dokumenty, které mají vysoké skóre napříč všemi funkcemi, jsou upřednostňovány, zatímco ty, které jsou slabé v jednom nebo více polích, jsou potlačeny.

V tomto příkladu vytvořte profil bodování, který obsahuje dvě funkce pro posílení, jež zvyšují podle rating a baseRate, a potom nastavte functionAggregation na product.

### Create a new index
PUT {{url}}/indexes/hotels-scoring?api-version=2026-08-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"
}

Tento další požadavek načte index s prohledávatelným obsahem, který profil testuje.

### Upload documents to the index
POST {{url}}/indexes/hotels-scoring/docs/index?api-version=2026-08-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"
            }
        }
    ]
}

Spusťte dotaz, který používá kritéria v bodovacím profilu ke zvýšení výsledků na základě vysokého hodnocení a vysoké základní sazby. Zvýšení skóre se agreguje za účelem dalšího zvýšení úrovně výsledků, které mají vysoké skóre v oboufunkcích

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

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

Hlavní odpovědí pro tento dotaz je "Gastronomic Landscape Hotel" s skóre hledání, které je téměř dvakrát tak vysoké jako další nejbližší shoda. Tento konkrétní hotel má jak nejvyšší hodnocení, tak nejvyšší základní sazbu, takže složení obou funkcí podporuje tuto shodu na nejvyšší úrovni.

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

Tipy pro ladění

  • Začněte konzervativně: zvýšení v rozsahu 1,25–2,0; zvýšit pouze v případě, že je rekuence skutečně rozhodující.

  • Velikost okna: Pro aktuální obsah použijte P30D, P90D/P180D pro mírnou aktuálnost, P365D pro dlouhodobé využití.

  • Volba interpolace:

    • kvadratický posuv, když chcete silný tlak směrem k nedávným.
    • lineární, pokud chcete rovnoměrný gradient.
    • logaritmické, když chcete mírnou předvolbu.
  • Agregace: Pokud kombinujete více funkcí, je součet nejjednodušší; přepněte na maximum, pokud chcete, aby dominuje jeden signál

Řešení potíží s bodovacími profily

Pomocí následující tabulky můžete diagnostikovat běžné problémy s bodovacími profily.

Problém Možná příčina Řešení
Profil bodování se nepoužoval. Název profilu nebyl zadán v dotazu. Přidejte scoringProfile do požadavku hledání parametr s přesným názvem profilu.
Nebyl pozorován žádný efekt zesílení Pole není označené jako filterable Funkce lze použít pouze u polí, která jsou přiřazena jako filterable. Aktualizujte schéma indexu.
Neočekávané výsledky hodnocení Příliš nízká nebo vysoká hodnota zvýšení Začněte se zvýšením hodnot v rozsahu 1,25–2,0 a upravte je na základě testování.
Nedávné dokumenty nezvyšují aktuálnost boostingDuration příliš krátký nebo nesprávný formát Ověřte formát doby trvání (např. "P30D" po dobu 30 dnů) a v případě potřeby okno prodlužte.
Funkce vzdálenosti nefunguje Pole není Edm.GeographyPoint Funkce vzdálenosti funguje pouze s Edm.GeographyPoint poli.
Funkce Tag nevrací žádné posílení. Značky neodpovídají hodnotám dotazu Ověřte, že tagsParameter odpovídá hodnotám v požadavku scoringParametershledání .
Profil existuje, ale dotaz selže. Neplatný název pole v profilu Ujistěte se, že ve schématu indexu existují všechny názvy polí v bodovacím profilu.