2009-08-07 6 views
2

Ich verwende Lucene. NET Sagen wir, ich möchte nur 50 Ergebnisse ab dem Ergebnis 100 zurückgeben, wie könnte ich darüber gehen? Ich habe die Dokumente durchsucht, finde aber nichts. Gibt es etwas, das mir fehlt?Lucene. NET Ergebnis Subsets

Antwort

1

Ich nehme an, Sie tun dies für den Zweck des Paging. Die übliche Vorgehensweise in einer Lucene-Implementierung (einschließlich Solr) besteht darin, die Abfrage einfach normal auszuführen, aber nur die gespeicherten Daten für die gewünschten Ergebnisse zu laden.

In einem typischen Paging-Szenario kann dies bedeuten dieselbe Abfrage mehrmals ausführen, was wie eine Verschwendung von Ressourcen erscheinen mag, aber mit Hilfe des Systemcaches und möglicherweise durch das Zwischenspeichern von Lucene ist es nicht so schlimm. Der Vorteil ist Staatenlosigkeit, die Sie skalieren können.

5

Der Code sollte wie folgt aussehen:

TopDocs topDocs = indexSearcher.Search(query, null, 150); 
for(int i=100, i<min(topDocs.totalHits,150); i++) { 
    Document doc = indexSearcher.doc(topDocs.scoreDocs[i]); 

    // Do something with the doc 
} 

Sie die Hits Klasse nicht verwenden. Es ist ineffizient und veraltet.