Добавьте профили оценки, чтобы улучшить результаты поиска

Note

Поиск с использованием ИИ Azure доступна через портал Azure, REST API и Azure SDKs. Он также лежит в основе Foundry IQ — управляемого слоя знаний, который преобразует корпоративный контент в многократно используемые базы знаний с учетом разрешений доступа для агентов на портале Microsoft Foundry.

Профили оценки используются для повышения или подавления ранжирования соответствующих документов на основе определяемых пользователем критериев. В этой статье вы узнаете, как указать и назначить профиль оценки, повышающий оценку поиска на основе предоставленных параметров. Профили оценки можно создавать на основе:

  • Взвешированные строковые поля, где повышение основано на совпадении, найденном в указанном поле. Например, совпадения, найденные в поле "Тема", считаются более релевантными, чем те же совпадения, найденные в поле "Описание".

  • Функции для числовых полей, включая даты и географические координаты. Функции для числового содержимого поддерживают усиление по таким параметрам, как расстояние (применяется к географическим координатам), свежесть (применяется к полям даты и времени), диапазон и величина.

  • Функции для коллекций строк (теги). Функция тегов повышает оценку поиска документа, если любой элемент в коллекции соответствует запросу.

  • (предварительная версия) Агрегирование различных повышений. В одном профиле оценки можно указать несколько функций оценки, а затем задать "functionAggregation": "product". Документы, которые получают высокие оценки по всем параметрам, имеют приоритет, в то время как те, которые получают низкие оценки в одной или нескольких областях, не учитываются.

Вы можете добавить профиль оценки в индекс, изменив его определение JSON на портале Azure или программно с помощью ТАКИх API, как создание или обновление индекса REST или эквивалентные API обновления индекса в любом пакете SDK Azure. Требования к перестроения индексам отсутствуют, поэтому вы можете добавлять, изменять или удалять профиль оценки без влияния на индексированные документы.

В конце этой статьи можно создавать и применять профили оценки для повышения релевантности поиска на основе весов полей, свежести, расстояния или пользовательских критериев.

Prerequisites

  • Подписка Azure. Создайте его бесплатно.

  • Служба ИИ Azure Поиск. Создайте службу или найдите существующую службу.

  • Индекс поиска с текстовыми или числовыми (невекторными) полями.

  • Разрешения: Требуется вкладчик данных индекса поиска для создания или обновления индекса с профилями оценки. Чтобы запросить запрос с помощью профиля оценки, вам потребуется средство чтения данных индекса поиска. Дополнительные сведения см. в разделе "Подключение с помощью ролей".

  • Установка пакета SDK (необязательно):

    • Питон: pip install azure-search-documents
    • C#: dotnet add package Azure.Search.Documents

Tip

Для непосредственных примеров кода перейдите к определению профиля оценки.

Правила оценки профилей

Профили оценки можно использовать в поиске ключевых слов, векторном поиске, гибридном поиске и семантической повторной настройке). Однако профили оценки применяются только к невекторным полям, поэтому убедитесь, что индекс содержит текст или числовые поля, которые можно увеличить или взвесить.

В индексе может быть до 100 профилей оценки (см. ограничения службы), но в любом запросе можно указать только один профиль.

Вы можете использовать семантический рейтинг с профилями оценки и применить профиль оценки после семантического ранжирования . В противном случае, если несколько функций ранжирования или релевантности находятся в игре, семантическое ранжирование является последним шагом. Как работает оценка поиска иллюстрируется через порядок выполнения операций.

Дополнительные правила применяются специально к функциям.

Note

Не знакомы с понятиями релевантности? Посетите страницу "Релевантность и оценка в службе AI-поиска Azure" для получения фоновой информации. Вы также можете посмотреть этот сегмент видео на YouTube для оценки профилей по результатам BM25.

Определение профиля оценки

Профиль оценки определяется в схеме индекса. Он состоит из весовых полей, функций и параметров.

В следующем определении показан простой профиль с именем geo. Этот пример повышает результаты, имеющие поисковый термин в поле hotelName. Она также использует функцию distance, чтобы отдавать предпочтение результатам, которые находятся в пределах 10 километров от текущего расположения. Если кто-то выполняет поиск по термину inn, а "inn" является частью имени отеля, документы, включающие отели с "inn" в пределах 10-километрового радиуса текущего расположения, отображаются выше в результатах поиска.

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

Справочник: профили оценки | функция оценки | функция расстояния

Чтобы использовать этот профиль оценки, формулируйте запрос, чтобы указать параметр scoringProfile в запросе. Если вы используете REST API, запросы задаются с помощью запросов GET и POST. В следующем примере "currentLocation" имеет в качестве разделителя один дефис (-). За ними следуют координаты долготы и широты, где долготы являются отрицательными значениями.

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

Справочник. Поиск документов (REST) | scoringProfile параметр | scoringParameters

Параметры запроса, в том числе scoringParametersописаны в разделе "Документы поиска" (REST API).

Дополнительные сценарии см. в примерах свежести и расстояния и взвешенного текста и функций в этой статье.

Запрос с использованием профиля оценки через 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']})")

Ссылка: параметр SearchClient.search | scoring_profile

Добавление профиля оценки в индекс поиска

  1. Начните с определения индекса. Вы можете добавлять и обновлять оценочные профили в существующем индексе без его перестройки. Чтобы извлечь существующий индекс, используйте команду Get Index, а чтобы разместить ревизию, используйте запрос Создать или обновить индекс.

  2. Вставьте шаблон, указанный в этой статье.

  3. Укажите имя, которое соответствует соглашениям об именовании.

  4. Укажите критерии повышения. Один профиль может содержать текстовые взвешанные поля, функции или оба.

Следует работать итеративно, используя набор данных, который помогает доказать или опровергнуть эффективность заданного профиля.

Профили оценки можно определить на портале Azure, как показано на следующем снимке экрана, или программным способом с помощью REST API или пакетов SDK Azure, таких как класс ScoringProfile в клиентских библиотеках .NET или Python .

Снимок экрана: параметр

Template

В этом разделе показан синтаксис и шаблон для профилей оценки. Для описания свойств см. в справочнике для 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) "...", 

Использование текстовых взвешированных полей

Используйте текстовые поля, если контекст поля важен, а запросы включают searchable строковые поля. Например, если запрос содержит термин "аэропорт", вы можете использовать "аэропорт" в поле "Имя отеля", а не в поле "Описание".

Взвешенные поля — это пары "имя-значение", состоящие из searchable поля, и положительного числа, которое используется в качестве умножителя. Если исходная оценка поля HotelName равна 3, повышенной оценкой для этого поля будет 6, что повышает общую оценку самого родительского документа.

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

Использование функций

Используйте функции, когда простые относительные веса недостаточны или не применимы, как, например, в случае расстояния и свежести, которые рассчитываются на основе числовых данных. Вы можете задать несколько функций для оценочного профиля. Дополнительные сведения о типах данных EDM, используемых в поиске ИИ Azure, см. в статье "Поддерживаемые типы данных".

Function Description Случаи использования
distance Увеличение за счет близости или географического расположения. Эта функция может использоваться только с полями типа Edm.GeographyPoint . Используйте для сценариев "найти рядом со мной".
freshness Повышение по значениям в поле datetime (Edm.DateTimeOffset). Задайте boostingDuration , чтобы указать значение, представляющее интервал времени, по которому происходит повышение. Используйте, когда вы хотите акцентировать внимание на недавних (новых) датах. Вы также можете увеличить такие элементы, как события календаря с будущими датами, которые ближе к настоящему времени, по сравнению с элементами, которые находятся дальше в будущем. Один конец диапазона привязан к текущему времени.
magnitude Величина — это вычисленное расстояние между значением документа (например, датой или расположением) и точкой ссылки (например, "сейчас" или целевым расположением). Это входные данные для функции оценки и определяет, сколько усилий применяется. Изменение ранжирования на основе диапазона значений для числового поля. Значение должно быть целым числом или числом с плавающей запятой. Для оценок по звездам от 1 до 4 — 1. Для маржи более 50 % — 50. Эта функция может использоваться только с полями Edm.Double и Edm.Int. Для функции magnitude можно задать обратный диапазон (от максимального к минимальному), если вы хотите инверсную схему (например, повысить значимость предметов с более низкими ценами по сравнению с предметами с более высокими ценами). Если у вас есть диапазон цен от 100 до 1 доллара США, для параметров boostingRangeStart и boostingRangeEnd следует установить значения 100 и 1 соответственно, чтобы повысить приоритет для элементов с более низкими ценами. Используйте, когда хотите повысить рентабельность, рейтинги, количество кликов, количество загрузок, максимальную цену, минимальную цену или счет скачиваний. При наличии двух соответствующих элементов сначала отображается элемент с более высоким рейтингом.
tag Повышение результата по тегам, совпадающим для обоих поисковых документов и строк запроса. Теги предоставляются в tagsParameter. Эту функцию можно использовать только с полями поиска типа Edm.String и Collection(Edm.String). Используйте при наличии полей тегов. Если заданный тег в списке является списком с разделителями-запятыми, можно использовать нормализатор текста в поле для удаления запятых во время запроса (сопоставлять символ запятой с пробелом). Этот подход "сглаживает" список, чтобы все термины были одной длинной строкой терминов с разделителями-запятыми.

Оценка свежести и расстояния — это особые случаи оценки на основе величины, где величина автоматически вычисляется из даты или географического поля.

Правила использования функции

  • Функции могут применяться только к полям, которые относятся как filterable.
  • Тип функции (freshness, magnitude, distance, tag) необходимо указывать в нижнем регистре.
  • Функции не могут содержать null или пустые значения.
  • Функции могут иметь только одно поле для определения функции. Чтобы использовать величину дважды в одном профиле, укажите два определения величины, по одному для каждого поля.

Настройка интерполяций

Интерполяции определяют форму наклона, используемого для увеличения свежести и дистанции. Поскольку оценка меняется от высокой к низкой, наклон всегда уменьшается, но интерполяция определяет кривую нисходящего склона и насколько агрессивно изменяется оценка повышения по мере старения дат документа.

Interpolation Description
linear Для элементов, находящихся в заданных максимальных и минимальных пределах, усиление применяется в постепенно уменьшающемся размере. Рекомендуется, когда необходимо плавное уменьшение релевантности. Линейная интерполяция — это интерполяция по умолчанию для оценочного профиля.
constant Для элементов, находящихся в пределах заданного диапазона, к результатам ранжирования применяется постоянное усиление. Используйте это, если вы хотите фиксированный штраф независимо от возраста.
quadratic Квадратик первоначально уменьшается на меньшем темпе, а затем ускоряется по мере приближения к конечному диапазону, он уменьшается на гораздо более высоком интервале. Используйте эту интерполяцию, если вы хотите сильно отдавать предпочтение последним документам и существенно понизить рейтинг старых. Этот параметр интерполяции не допускается в функции оценки тегов.
logarithmic Логарифмическая функция сначала уменьшается с большей скоростью, а затем, когда она приближается к границе диапазона, уменьшается на гораздо меньшие величины. Рекомендуется, если вы отдаёте предпочтение очень актуальному контенту, но с меньшей чувствительностью к старению документов. Этот параметр интерполяции не допускается в функции оценки тегов.

Схема фигур наклона для постоянных, линейных, логарифмических и квадратных интерполяций в диапазоне 365 дней

Настройка boostingDuration для функции свежести

boostingDuration — это атрибут функции freshness. Вы используете его для установки срока действия, после которого повышение останавливается для определенного документа. Например, для продвижения продуктовой линейки или бренда в течение 10-дневного промопериода следует указать этот 10-дневный период как "P10D" в этих документах.

boostingDuration необходимо отформатировать как XSD-значение dayTimeDuration (ограниченное подмножество значения длительности ISO 8601). Используется следующий шаблон: "P[nD][T[nH][nM][nS]]".

Следующая таблица содержит несколько примеров.

Duration boostingDuration
1 день "P1D"
2 дня и 12 часов "P2DT12H"
15 минут "PT15M"
30 дней, 5 часов, 10 минут и 6,334 секунды "P30DT5H10M6.334S"
1 год "365D"

Дополнительные примеры см. в документе о типах данных в схеме XML (веб-сайт W3.org).

Пример: повышение свежести или расстояния

Форма кривой усиления (постоянная, линейная, логарифмическая, квадратичная) влияет на то, насколько агрессивно изменяются оценки по всему диапазону.

При использовании функции свежести, если вы хотите, чтобы повышение оказывало более выраженный эффект на более недавние даты, выберите квадратную интерполяцию. Квадратичная функция усиливает влияние близких недавних дат и ближних расположений, замедленно уменьшаясь на дальнем конце диапазона. В отличие от этого, логарифмическая кривая более резко изменяется на дальнем конце.

Ниже приведен пример профиля оценки, демонстрирующего повышение свежести.

{
    "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"
            }
          }
        ]
    }
  ]
}
  • Функция freshness вычисляет величину от "сейчас" до lastUpdated.
  • Положительный импульс с квадратичной интерполяцией увеличивает подъем для последних дат, быстро снижаясь для более ранних.
  • "boostingDuration": "365D" определяет период времени, по которому оценивается свежесть, например повышение документов, датированных в течение последнего года.
  • "interpolation": "quadratic" означает, что эффект повышения сильнее для документов, более близких к текущей дате, и ослабевает намного более резко для старых.

В следующем примере линейная интерполяция обеспечивает устойчивое предпочтение для последнего содержимого в 30-дневном окне. Увеличьте уровень, если сигнал должен превзойти другие факторы релевантности.

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

Справочные материалы: функция freshness | boostingDuration

Пример: усиление на основе взвешенного текста и функций

Tip

Ознакомьтесь с этой публикацией блога и записной книжкой для демонстрации использования профилей оценки и усиления значимости документов в сценариях векторного и генеративного ИИ.

В следующем примере показана схема индекса с двумя профилями оценки (boostGenre, newAndHighlyRated). Любой запрос к этому индексу, включающий любой из двух профилей в качестве параметра запроса, использует профиль для оценки результирующего набора.

Профиль boostGenre использует взвешенные текстовые поля, повышая совпадения в полях albumTitle, genre и artistName. Поля усиливаются в 1,5, 5 и 2 раза соответственно. Почему жанру придается намного более высокий приоритет, чем другим? Если поиск проводится по данным, которые несколько однородны (как и в случае с "жанром" в musicstoreindex), может потребоваться более большая дисперсию относительного веса. Например, слово rock появляется в musicstoreindex как жанр и в идентично сформулированных описаниях жанра. Если вы хотите, чтобы жанр перевесил описание жанра, параметр жанра должен иметь гораздо более высокий относительный вес.

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

Пример: агрегирование функций

Note

Эта возможность сейчас доступна в режиме предварительной версии через latest preview REST API и в пакетах предварительной версии Azure SDK, в которых поддерживается эта функция.

В одном профиле оценки можно указать несколько функций оценки, а затем задать "functionAggregation": "product". Документы, которые получают высокие оценки по всем параметрам, имеют приоритет, в то время как те, которые получают низкие оценки в одной или нескольких областях, не учитываются.

В этом примере создайте профиль оценки, включающий две функции усиления, которые увеличивают на rating и baseRate, а затем установите functionAggregation на product.

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

Следующий запрос загружает индекс поисковым содержимым, которое проверяет профиль.

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

Выполните запрос, использующий критерии в профиле оценки, чтобы повысить результаты на основе высокой оценки и высокой базовой ставки. Оценки усиления агрегируются для дальнейшего продвижения результатов с высокими оценками в обеих функциях.

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

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

Лучший ответ для этого запроса — "Гастрономический ландшафтный отель" с поисковым рейтингом, который почти в два раза выше, чем у ближайшего сопоставимого результата. Данный отель имеет как самый высокий рейтинг, так и самую высокую базовую цену, поэтому сочетание обеих функций выводит его на вершину.

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

Советы по настройке

  • Начните консервативно: повышайте в диапазоне 1,25–2,0; увеличивайте только в том случае, если недавность действительно решающая.

  • Размер окна: используйте P30D для горячего содержимого, P90D/P180D для умеренной давности, P365D для длиннохвостого распределения.

  • Выбор интерполяции:

    • При квадратичном подходе, когда нужен значительный акцент на недавние данные.
    • линейный, если требуется устойчивый градиент.
    • логарифмический, если требуется нежное предпочтение.
  • Агрегирование: при объединении нескольких функций сумма проще всего; переключение на максимальное значение, если требуется, чтобы один сигнал доминировал

Устранение неполадок профилей оценки

Используйте следующую таблицу для диагностики распространенных проблем с профилями оценки.

Проблема Возможная причина Резолюция
Профиль оценки не применяется Имя профиля, не указанное в запросе Добавьте scoringProfile параметр в запрос поиска с точным именем профиля.
Эффект повышения не был обнаружен Поле не помечается как filterable Функции могут быть применены только к полям с атрибутом filterable. Обновите схему индекса.
Непредвиденные результаты ранжирования Значение усиления слишком низкое или высокое Начните с значений повышения в диапазоне 1.25–2.0 и настройте на основе тестирования.
Свежесть не способствует продвижению последних документов boostingDuration слишком короткий или неправильный формат Проверьте формат длительности (например, P30D в течение 30 дней) и при необходимости расширьте окно.
Функция расстояния не работает Поле не является Edm.GeographyPoint Функция расстояния работает только с полями Edm.GeographyPoint .
Функция тэга не возвращает усиление Теги не соответствуют значениям запроса Проверьте, что значения tagsParameter совпадают с значениями в запросе scoringParameters поиска.
Профиль существует, но запрос завершается ошибкой Недопустимое имя поля в профиле Убедитесь, что все имена полей в профиле оценки существуют в схеме индекса.