Frage

Ich hatte das langfristige Problem, dass ich nicht ganz verstand, wie man eine anständige Lucene-Sortierung oder -Rangliste umsetzt.Angenommen, ich habe eine Liste von Städten und ihrer Bevölkerung.Wenn jemand nach „neu“ oder „London“ sucht, möchte ich die Liste der Präfixübereinstimmungen sortiert nach Bevölkerungszahl haben, und ich arbeite mit einer Präfixsuche und einer umgekehrten Sortierung nach Feld, wobei es ein Bevölkerungsfeld gibt, z. B. New Mexico, New York ;oder London, Londonderry.

Allerdings möchte ich auch immer, dass der exakt passende Name oben steht.Im Fall von „London“ sollte die Liste also „London, London, Londonderry“ anzeigen, wobei das erste London im Vereinigten Königreich und das zweite London in Connecticut liegt, auch wenn Londonderry eine höhere Bevölkerungszahl als London CT hat.

Hat jemand eine einzige Abfragelösung?

War es hilfreich?

Lösung

dlamblin, mal sehen, ob ich das richtig verstehe:Sie möchten eine präfixbasierte Abfrage durchführen und die Ergebnisse dann nach Bevölkerung sortieren und möglicherweise die Sortierreihenfolge mit der Präferenz für genaue Übereinstimmungen kombinieren.Ich schlage vor, dass Sie die Suche von der Sortierung trennen und einen CustomSorter für die Sortierung verwenden:Hier ist Ein Blogeintrag, der einen benutzerdefinierten Sortierer beschreibt. Das klassische Lucene-Buch beschreibt das gut.

Andere Tipps

API für

Sortierkomparator

sagt

Für jeden einzigartigen Begriff im Feld ist ein deutlich vergleichbares Vergleich zu

Sie können eine beantragen

FieldSortedHitQueue

zum Sortierkomparator, der ein Komparatorfeld hat, für das die API sagt ...

Speichert einen Komparator, der jedem Feld entspricht, nach dem sortiert wird.

Somit kann der Begriff entsprechend sortiert werden

Meine aktuelle Lösung besteht darin, einen exakten Sucher und einen Präfixsucher zu erstellen, beide nach umgekehrter Population sortiert, und dann alle meine Treffer, beginnend mit den genauen Treffern, zu kopieren und zu den Präfixtreffern überzugehen.Dadurch wird das Auslagern meiner Ergebnisse etwas ärgerlicher, als ich denke.

Außerdem habe ich einen Hash verwendet, um Duplikate zu entfernen, aber später habe ich den Präfixsucher in eine boolesche Abfrage einer Präfixsuche (MUSS) mit einer genauen Suche (MUSS NICHT) geändert, damit Lucene die Duplikate entfernt.Obwohl dies noch verschwenderischer schien.

Bearbeiten:In einen Kommentar verschoben (da die Funktion jetzt existiert): Yuval F Vielen Dank für deinen Blogbeitrag ...Woher soll der Sortiervergleicher wissen, dass das Namensfeld „London“ genau mit dem Suchbegriff „London“ übereinstimmt, wenn er nicht auf den Suchbegriff zugreifen kann?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top