Gibt es eine Möglichkeit, eine wirklich zufällige Stichprobe aus einem ElasticSearch-Index zu erhalten? d. h. eine Abfrage, die ein beliebiges Dokument mit der Wahrscheinlichkeit 1/N
aus dem Index abruft (wobei N
die Anzahl der derzeit indizierten Dokumente ist)?
Und als Folgefrage: Wenn alle Dokumente ein numerisches Feld s
haben, gibt es eine Möglichkeit, ein Dokument durch gewichtete Stichproben zu bekommen, dh wo die Wahrscheinlichkeit ist, Dokument i
mit Wert s_i
zu erhalten ist gleich s_i / sum(s_j for j in index)
?
Ich weiß, dass es eine alte Frage ist, aber jetzt ist es möglich zu verwenden random_score , mit der folgenden Suchanfrage:
%Vor%Für mich ist es sehr schnell mit ca. 2 Millionen Dokumenten.
Ich verwende den aktuellen Zeitstempel als Startwert, aber Sie können alles verwenden, was Sie möchten. Das beste ist, wenn Sie den gleichen Samen verwenden, erhalten Sie die gleichen Ergebnisse. Sie können also die Sitzungs-ID Ihres Benutzers als Startwert verwenden und alle Benutzer haben eine andere Reihenfolge.
Der einzige Weg, den ich kenne, um zufällige Dokumente aus einem Index zu bekommen (zumindest in den Versionen & lt; = 1.3.1), besteht darin, ein Skript zu verwenden:
%Vor%Sie können dieses Skript verwenden, um basierend auf einem Feld des Datensatzes eine Gewichtung vorzunehmen.
Es ist möglich, dass sie in Zukunft etwas komplizierteres hinzufügen, aber Sie müssen das wahrscheinlich vom ES-Team anfordern.
Sie können random_score mit einer function_score
-Abfrage verwenden.
Der schlechte Teil ist, dass dies ein zufälliges Ergebnis auf jedes Dokument anwendet, die Dokumente sortiert und dann das erste zurückgibt. Ich kenne nichts, das schlau genug ist, um ein zufälliges Dokument auszuwählen.
Tags und Links random statistics elasticsearch