2012-04-13 13 views
0

Hallo Ich habe so ein Stück CodeLucene IndexSearcher Rückkehr immer 20 ScoreDocs

IndexSearcher iSearcher = new IndexSearcher(dir); 
TopDocs docs = iSearcher.search(parsedQuery,filter, 9); 

ich immer 20 scoredocs bekommen. Könnte jemand helfen?

+0

meinst du docs.scoreDocs.length == 20? Welche Version von Lucene benutzt du? – jpountz

+0

Ich verwende Lucene von Compass (wo JDBC-Verzeichnis implementiert ist), wie ich Index in der DB speichern muss. Nicht sicher, welche Version von Lucene dort verwendet wird. Eigentlich gibt es keinen Unterschied, welche Nummer ich auf die Suchmethode gesetzt habe - ich bekomme immer 20 ScoreDocs innerhalb von TopDocs –

Antwort

0

1) Erhalten Sie immer genau 20 ScoreDocs zurück? Da Ihre Suche das Ergebnis auf 9 ScoreDocs begrenzt, bin ich neugierig auf die '20 ScoreDocs '.

2) Haben Sie überprüft, ob Ihr Index Lucene-Begriffe enthält, die zu mehr als 20 ScoreDocs führen würden? Ich habe es nützlich gefunden, nachdem ich meine Indexierungsstrategie geändert hatte, um den Index mit Luke zu testen, bevor ich irgendwelche anderen Tests durchführte.

0

Nur weil doc.scoreDocs.length == 20 bedeutet nicht, dass Sie 20 Ergebnisse erhalten haben. Sie müssen überprüfen, ob die Dokument-ID jedes einzelnen Ergebnisses nicht gleich Integer.MAX_VALUE ist. Dies wird als Sentinel-Wert ohne Ergebnis verwendet. Der Punkt all dies ist typisch für Lucene - Minimierung der Speicherzuweisung, in diesem Fall durch Wiederverwendung bereits zugewiesener Ergebnis-Arrays.

0

Vielen Dank für Ihre Antworten. Problem war tatsächlich im Build-Pfad. Es kann keine existierende Bibliothek geben und das Projekt konnte nicht erstellt werden. Aus diesem Grund wurde jedes Mal, wenn ich Code ändern und debuggen wollte, eine zuvor erstellte Version verwendet.

Entschuldigung für die Irreführung.

Verwandte Themen