devo ottenere un campione casuale da un indice elasticsearch, cioè di rilasciare una query che recupera alcuni documenti da un determinato indice con probabilità pesata Wj/ΣWi
(dove Wj
è un peso di fila j
e Wj/ΣWi
è un somma di pesi di tutti i documenti in questa query).ponderato campionamento casuale in elasticsearch
Attualmente, ho la seguente query:
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"}}]
}
Esso restituisce 5 articoli della categoria selezionata, in modo casuale. Ogni articolo ha un campo weight
. Quindi, probabilmente dovrò usare
"script_score": {
"script": "weight = data['weight'].value/SUM; if (_score.doubleValue() > weight) {return 1;} else {return 0;}"
}
come descritto here.
ho i seguenti problemi:
- Qual è il modo corretto di fare questo?
- Devo abilitare Dynamic Scripting?
- Come calcolare la somma totale della query?
Grazie mille per il vostro aiuto!