У меня есть наборы из 3 одинаковых (в тексте) предметов в Azure Search, различающихся по цене и точкам. Более дешевые продукты с более высокими очками повышаются. (Цена увеличивается больше очков, а наоборот увеличивается).Azure Поиск скоринга
Однако, я продолжаю видеть результаты поиска, подобные этому.
Поиск находится на 'john milton'.
я
Product="Id = 2-462109171829-1, Price=116.57, Points= 7, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=32.499783
Product="Id = 2-462109171829-2, Price=116.40, Points= 9, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=32.454872
Product="Id = 2-462109171829-3, Price=115.64, Points= 9, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=32.316270
Я ожидаю, что порядок подсчета очков, чтобы быть что-то вроде этого, с самой низкой ценой в первую очередь.
Product="Id = 2-462109171829-3, Price=115.64, Points= 9, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=
Product="Id = 2-462109171829-2, Price=116.40, Points= 9, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=
Product="Id = 2-462109171829-1, Price=116.57, Points= 7, Name=Life of Schamyl/John Milton Mackie, Description=.", Score=
Что мне недостает или возможны незначительные вариации оценки?
Индекс определяется как
let ProductDataIndex =
let fields =
[|
new Field (
"id",
DataType.String,
IsKey = true,
IsSearchable = true);
new Field (
"culture",
DataType.String,
IsSearchable = true);
new Field (
"gran",
DataType.String,
IsSearchable = true);
new Field (
"name",
DataType.String,
IsSearchable = true);
new Field (
"description",
DataType.String,
IsSearchable = true);
new Field (
"price",
DataType.Double,
IsSortable = true,
IsFilterable = true)
new Field (
"points",
DataType.Int32,
IsSortable = true,
IsFilterable = true)
|]
let weightsText =
new TextWeights(
Weights = ([|
("name", 4.);
("description", 2.)
|]
|> dict))
let priceBoost =
new MagnitudeScoringFunction(
new MagnitudeScoringParameters(
BoostingRangeStart = 1000.0,
BoostingRangeEnd = 0.0,
ShouldBoostBeyondRangeByConstant = true),
"price",
10.0)
let pointsBoost =
new MagnitudeScoringFunction(
new MagnitudeScoringParameters(
BoostingRangeStart = 0.0,
BoostingRangeEnd = 10000000.0,
ShouldBoostBeyondRangeByConstant = true),
"points",
2.0)
let scoringProfileMain =
new ScoringProfile (
"main",
TextWeights =
weightsText,
Functions =
new List<ScoringFunction>(
[
priceBoost :> ScoringFunction
pointsBoost :> ScoringFunction
]),
FunctionAggregation =
ScoringFunctionAggregation.Sum)
new Index
(Name = ProductIndexName
,Fields = fields
,ScoringProfiles = new List<ScoringProfile>(
[
scoringProfileMain
]))
Привет, Hocho, вопрос о быстром уточнении, сколько документов в вашем индексе? Скоринг в индексах с низким количеством документов может немного отличаться. Это результат того, как они организованы внутри страны, чтобы обеспечить эффективные масштабирование и масштабирование распределенного сервиса. – Yahnoosh
30+ миллионов документов. Я делаю некоторые доказательства тестирования концепции, поэтому каждый документ реплицируется 3 раза со всеми одинаковыми полями, за исключением поля «Идентификация» и полей «Цена и точки», случайным образом генерируемых в пределах 10% друг от друга соответственно. – hocho
Спасибо! Вы видите такое же поведение, когда вы выдаете запрос, который менее избирателен? Например: «Джон» (если у вас в вашем наборе данных больше одного Джона :)) – Yahnoosh