Взвешенная случайная выборка в Elasticsearch
Мне нужно получить случайную выборку из индекса ElasticSearch, то есть выполнить запрос, который извлекает некоторые документы из данного индекса с взвешенной вероятностьюWj/ΣWi
(гдеWj
это вес строкиj
а такжеWj/ΣWi
это сумма весов всех документов в этом запросе).
В настоящее время у меня есть следующий запрос:
GET products/_search?pretty=true
{"size":5,
"query": {
"function_score": {
"query": {
"bool":{
"must": {
"term":
{"category_id": "5df3ab90-6e93-0133-7197-04383561729e"}
}
}
},
"functions":
[{"random_score":{}}]
}
},
"sort": [{"_score":{"order":"desc"}}]
}
В случайном порядке возвращает 5 элементов из выбранной категории. У каждого предмета есть полеweight
, Итак, я, вероятно, должен использовать
"script_score": {
"script": "weight = data['weight'].value / SUM; if (_score.doubleValue() > weight) {return 1;} else {return 0;}"
}
как описаноВот.
У меня есть следующие проблемы:
Как правильно это сделать?Нужно ли включатьДинамический Скриптинг?Как рассчитать общую сумму запроса?Большое спасибо за вашу помощь!