Muestreo aleatorio ponderado en Elasticsearch

Necesito obtener una muestra aleatoria de un índice ElasticSearch, es decir, emitir una consulta que recupere algunos documentos de un índice dado con probabilidad ponderadaWj/ΣWi (dóndeWj es un peso de filaj yWj/ΣWi es una suma de pesos de todos los documentos en esta consulta).

Actualmente, tengo la siguiente consulta:

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"}}]
}

Devuelve 5 elementos de la categoría seleccionada, al azar. Cada artículo tiene un campoweight. Entonces, probablemente tenga que usar

"script_score": {
  "script": "weight = data['weight'].value / SUM; if (_score.doubleValue() > weight) {return 1;} else {return 0;}"
}

tal como se describeaquí.

Tengo los siguientes problemas:

¿Cuál es la forma correcta de hacer esto?¿Necesito habilitarScripting Dinámico?¿Cómo calcular la suma total de la consulta?

¡Muchas gracias por tu ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta