2010-11-26 11 views
0

Nach der documentation soll Zend Lucene lexikografisch sortieren. Ich stelle fest, dass dies nicht der Fall ist. Wenn ich eine Abfrage 'avg: [050 TO 300]' habe, werden alle Werte in diesem Bereich zurückgegeben, aber sie werden nach der Dokument-ID sortiert, nicht nach dem Wert.Sortieren einer Bereichsabfrage mit Zend Lucene

Ich habe festgestellt, dass die Funktion find() zusätzliche Parameter akzeptieren kann, so dass ich nach einer bestimmten Spalte sortieren kann (zB $hits = $index->find($query, 'avg', SORT_NUMERIC, SORT_ASC);). Ich erstelle jedoch $ query dynamisch und möchte nicht jede Suche nach 'avg' sortieren.

Wie zwinge ich Lucene, die Ergebnisse automatisch lexikografisch zu sortieren, wenn ich eine Entfernungssuche mache? Und wenn das nicht möglich ist, wie füge ich dynamisch ein Sortierfeld zur Suchfunktion hinzu?

Antwort

1

Warum sortieren Sie $hits nicht selbst, nachdem Sie das Ergebnis von $index->find(...) bekommen? Ok, das sieht wie ein Workaround aus und wird für sehr große Ergebnismengen zeitaufwendig sein, aber ich denke, dass dies in den meisten Fällen der einfachste Weg ist.

+0

Da ich nur für eine bestimmte Anzahl von Abfragen sortiere, setze ich ein Flag, wenn ich THOSE-Abfragen mache und wenn es darum geht, finde ich ein if/else mit/ohne Sortierung zu finden. (zB: 'if ($ flag) {$ hits = $ index-> ​​finden ($ query, 'avg', SORT_NUMERIC, SORT_ASC);} else {$ hits = $ index-> ​​finden ($ query);}') –