2017-01-02 7 views
4

Я хочу добавить оценочный профиль в свой индекс в Azure Search. Более конкретно, каждый документ в моем индексе имеет поле weight типа Edm.Double, и я хочу увеличить их в соответствии с этим значением. Я не хочу просто сортировать их непосредственно по отношению к weight, потому что релевантность поискового термина также важна.Как профили подсчета очков генерируют баллы в Azure Search?

Для того, чтобы проверить это, я создал оценочный профиль с функцией величины с величиной повышения 1000 (просто чтобы узнать, как я это делаю), линейная интерполяция, начальное значение 0 и конечное значение 1. Что я ожидал, что значение повышения будет добавлено к общей оценке поиска. Таким образом, документ с весом 0,5 получит повышение в 500, тогда как документ с весом 0,125 получит повышение 125. Однако результирующие оценки не были почти такими же интуитивными.

У меня есть несколько вопросов, в данном случае:

1) Как функция счет генерируемых в этом случае? У меня есть документы с весами, близкими друг к другу (скажем, 0,5465 и 0,5419), но различия между их итоговыми оценками составляют около 100-150, тогда как я ожидаю, что это будет около 4-5.

2) Как результаты оценки и веса объединены в итоговый результат для каждого результата поиска?

ответ

1

Благодарим за предоставление подробностей. Каковы были базовые значения этих двух документов?

Усиляющий фактор, предусмотренный в скоринговом профиле, фактически равен , умноженному на на базовые значения релевантности, рассчитанные с использованием терминов. Например, предположим, что базовые оценки, представленные в @ search.score в полезной нагрузке ответа, из двух документов были равны 0,5 и 0,2, а значения в столбце веса составляли 0,5465 и 0,5419 соответственно. С приведенной выше конфигурацией скорингового профиля с начальным значением 0, конечным значением 1, линейной интерполяцией и коэффициентом усиления 1000. Окончательный результат, который вы получите для каждого документа, вычисляется следующим образом:

документ 1: база search_score (0,5) * boost_factor (1000) * (вес (0,5465) - мин (0))/макс - мин (1) = final_search_score (273,25)

документ 2: base_search_score (0,2) * boost_factor (1000) * (вес (0,5419) - мин (0))/max - min (1) = final_search_score (108.38)

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

Nate

+0

Спасибо Нейт, это прекрасно отвечает на мой вопрос. Мне нужно одно уточнение, но это использование весов для каждого поля. Если у меня есть веса на моих полях, базовая оценка рассчитывается сначала с этими весами, а затем с использованием этого базового балла, формулировка, которую вы объяснили, рассчитана, правильно ли? – halileohalilei

+0

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

+0

Еще раз спасибо Nate. И последнее. Имеет ли документ с минимальным значением в функции подсчета очков окончательный результат 0? В моем случае 'weight - min' может быть 0, однако в этом случае я не хочу, чтобы этот документ был глубоко в результатах поиска, я просто не хочу, чтобы его повышали и сохраняли исходный базовый балл. Поэтому вместо того, чтобы умножать интерполированный коэффициент форсирования на базовый счет, я хочу добавить их. Есть ли способ сделать это? Или любое другое решение этой проблемы? – halileohalilei