2 Stimmen

Zufallsgeneriertes Suchergebnis in Sphinx

Hallo ich benutze sphinx 201 beta (r2792)

Ich habe einen rt-Index mit rt_attr_uint = rake. Mein Ziel ist es, die Ergebnisse nach diesem Attribut zu sortieren. was wie erwartet funktioniert mit

$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC')

aber ich möchte dieses Ergebnis auch randomisieren ... sagen wir mal, ich habe folgende Daten

(id,  title,  rake)
  1, 'test',  3
  2, 'test2', 3
  3, 'ásdf',  1
  4, 'rreer', 0

nachdem ich also zufällig angefügt habe

$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC, @random')

Ich würde erwarten, dass das Ergebnis nach dem Attribut Rake absteigend sortiert wird. aber ich erhalte einen Fehler:

sort-by attribute '@random' not found

was ich nicht verstehe, weil dieses zufällige Attribut ein internes Attribut ist mache ich etwas falsch? wo könnte ein Problem liegen? danke

2voto

pat Punkte 15831

Nach meinen schnellen Tests sieht es so aus, als ob Sphinx @random nur unterstützt, wenn es das einzige Attribut in der Sortierklausel ist. Ich fürchte also, Sie haben kein Glück - entweder Sie nur willkürlich sortieren, oder Sie nur Sortieren nach Schwader.

2voto

Rafa Punkte 1261

Ich habe die Zufallszahl in der SQL-Abfrage erstellt

SELECT ...  RAND() as random_sort, ...

Als Attribut hinzugefügt

sql_attr_float = random_sort

Und verwenden Sie sie dann in der erweiterten Sortierabfrage

$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC, random_sort DESC');

0voto

Abdo Punkte 12769

Für Echtzeit-Zufälligkeit, indexieren Sie die ids und sortieren Sie mit expr-Modus mit einem Ausdruck wie dieser (nicht sicher, dass dieser eine 100% zufällig ist):

( ( ( id % #{pagesize} + #{rand(pagesize * 2)} ) % #{pagesize} ) / #{pagesize} )

Fügen Sie dem obigen Ausdruck eine If-Anweisung hinzu, um Ihr Rake-Attribut zu verwenden.

[http://sphinxsearch.com/docs/1.10/sorting-modes.html\]\[1]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X