Gewichtete Zufallsstichprobe in Elasticsearch
Ich muss eine Zufallsstichprobe aus einem ElasticSearch-Index erhalten, d. H. Eine Abfrage ausgeben, mit der einige Dokumente aus einem bestimmten Index mit gewichteter Wahrscheinlichkeit abgerufen werden.Wj/ΣWi
(woWj
ist ein Gewicht der Reihej
undWj/ΣWi
ist eine Summe der Gewichte aller Dokumente in dieser Abfrage.
erzeit habe ich die folgende Abfrage:
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"}}]
}
It gibt 5 Elemente aus der ausgewählten Kategorie nach dem Zufallsprinzip zurück. Jeder Artikel hat ein Feldweight
. Also muss ich wohl @ benutz
"script_score": {
"script": "weight = data['weight'].value / SUM; if (_score.doubleValue() > weight) {return 1;} else {return 0;}"
}
wie beschriebenHie.
Ich habe die folgenden Probleme:
Was ist der richtige Weg, um dies zu tun? Muss ich @ aktivierDynamic Scripting?Wie wird die Gesamtsumme der Abfrage berechnet?Vielen dank für Deine Hilfe