Fondamentalmente, devi decidere un limite al numero di risultati che ti aspetti. Quindi si itera su tutti gli ScoreDoc
s nel risultante TopDocs
.
final MAX_RESULTS = 10000;
final Term t = /* ... */;
final TopDocs topDocs = searcher.search(new TermQuery(t), MAX_RESULTS);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc)
// "FILE" is the field that recorded the original file indexed
File f = new File(doc.get("FILE"));
// ...
}
Questo è fondamentalmente ciò che la classe Hits
fa, solo che fissa il limite a 50 risultati, e se eseguire iterazioni passato che, allora la ricerca si ripete, che di solito è uno spreco. Ecco perché è stato deprecato.
AGGIUNTO: Se non c'è un limite si può mettere sul numero dei risultati, è necessario utilizzare un HitCollector:
final Term t = /* ... */;
final ArrayList<Integer> docs = new ArrayList<Integer>();
searcher.search(new TermQuery(t), new HitCollector() {
public void collect(int doc, float score) {
docs.add(doc);
}
});
for(Integer docid : docs) {
Document doc = searcher.doc(docid);
// "FILE" is the field that recorded the original file indexed
File f = new File(doc.get("FILE"));
// ...
}
Tranne che voglio tutti i risultati. (Voglio che funzioni più come grep.) –