Взвешенная случайная выборка в 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;}"
}

как описаноВот.

У меня есть следующие проблемы:

Как правильно это сделать?Нужно ли включатьДинамический Скриптинг?Как рассчитать общую сумму запроса?

Большое спасибо за вашу помощь!

Ответы на вопрос(2)

Ваш ответ на вопрос