Мне нужно получить случайную выборку из индекса 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;}"
}
как описано здесь.
У меня есть следующие проблемы:
- Каков правильный способ сделать это?
- Нужно ли включать динамические сценарии?
- Как посчитать общую сумму запроса?
Спасибо большое за вашу помощь!