2011-01-04 4 views
2

Ich habe einen Solr-Index mit SolrNet zugegriffen, und ich möchte den Index (Position) eines bestimmten Dokuments in den Ergebnissen abrufen, ohne die gesamte Ergebnismenge zurückgeben.Solr Suchergebnisse und Abruf der Position des Dokuments

Ausführlicher ... die Abfrage gibt ~ 30.000 Dokumente zurück und ist nach einem Integer-Feld geordnet. Das eindeutige Schlüsselfeld enthält eine Guid, und ich möchte anhand des eindeutigen Schlüssels herausfinden, wo in den Ergebnissen ein bestimmtes Dokument ist, und nur die ersten 10 Ergebnisse zurückgeben.

Dieser Index wurde ursprünglich in Plain Old Lucene implementiert, und diese Aufgabe wurde mit zwei Abfragen erreicht, eine, um die Lucene-Dokument-ID des Dokuments zu erhalten, das ich wissen möchte, dann eine Sekunde, die die gesamte Ergebnismenge zurückgibt. Ich kann dann die Dokument-ID verwenden, um zu finden, wo das Dokument in der vollständigen Ergebnismenge erscheint, aber dann nur die Dokumente für die ersten 10 aufzählen.

Gibt es eine Möglichkeit zu erreichen, was ich mit Solr will, ohne zurückzukehren alle 30000 Ergebnisse (sogar die Beschränkung auf die Guid scheint nur zu langsam)?

Dank

+1

Was möchten Sie damit erreichen? Was ist das eigentliche Problem? –

+0

Lucene-Dokument-IDs sind ein Implementierungsdetail, Solr stellt sie nicht zur Verfügung. –

+0

Die Ergebnisse stellen eine paginierte Liste von Benutzern dar, die jeweils ein numerisches "Punkte" -Feld haben. Die Ergebnisse sollten nach diesem "Punkte" -Feld geordnet werden, und ich muss dann wissen, an welcher Stelle Benutzer X in den Ergebnissen erscheint. Über der paginierten Liste kann ich "Du bist an dritter Stelle" oder "Du bist an 321. Stelle" anzeigen. Wenn der aktuelle Benutzer auf der ersten Seite der Ergebnisse ist großartig, aber das Problem kommt, wenn sie nicht sind. Vielen Dank. – robinbetts

Antwort

5

Ich denke, Sie können mit einer Bereichsabfrage tun, einschließlich Ihrer Benutzer Punkt als untere Ebene können Sie die Anzahl der Benutzer oben erhalten. Sie können eine explizite Abfrage durchführen oder diese Informationen mithilfe des Facettenbereichsansatzes abrufen.

Wenn Sie also wissen, dass Ihr Benutzerpunkt 10.000 ist, könnten Sie eine Abfrage durchführen: Spiel: Tetris Punkte [MaxInt TO 10000], und wenn das Ergebnis 375 ist, würden Sie wissen, dass Ihr Benutzer in Rang 375 ist.

+0

Genie! Genau das habe ich gebraucht. Ich hatte das aufgegeben und kam einen Monat später auf das Problem zurück. Meine Frage kam auf Google und ich sah deine Antwort, die ich vorher nicht gesehen hatte. Vielen Dank! – robinbetts

0

Der einzige zuverlässige Weg, ich baut das Ranking bei Index-Zeit denken kann, hat das heißt ein „Rang“ Integer-Feld und es füllen, wenn Sie den Index aufzubauen. Der Nachteil davon ist, dass bei jedem Update der gesamte Index neu erstellt werden muss.

Lucene Doc-IDs sind nicht stabil, ich würde nicht empfehlen, sie dafür zu verwenden (siehe this, this, this), und Solr setzt sie trotzdem nicht frei.