Sie suchen Begriffsvektoren (eine Menge aller Wörter, die waren im Feld und die Anzahl der Male, die jedes Wort verwendet wurde, ausgenommen Stoppwörter). Sie verwenden IndexReaders getTermFreqVector (docid, field) für jedes Dokument im Index und füllen Sie HashSet
mit ihnen.
Die Alternative wäre terms () und wählen Sie nur Begriffe für das Feld aus, an dem Sie interessiert sind:
%Vor% Dies ist nicht die optimale Lösung, Sie lesen und löschen dann alle anderen Felder. Es gibt eine Klasse Fields
in Lucene 4, die Begriffe (Feld) nur für ein einzelnes Feld.
Wenn Sie die Lucene 4.0 API verwenden, müssen Sie die Felder aus dem Index-Reader holen. Die Felder bietet dann die Möglichkeit, die Begriffe für jedes Feld im Index zu erhalten. Hier ist ein Beispiel, wie man das macht:
%Vor%Schließlich können Sie für die neue Version von Lucene die Zeichenfolge vom Aufruf BytesRef abrufen:
%Vor%statt
%Vor%Wenn Sie die Dokumenthäufigkeit abrufen möchten, können Sie Folgendes tun:
%Vor% Die Antworten, die TermsEnum
und terms.next()
verwenden, haben einen kleinen Fehler. Dies liegt daran, dass TermsEnum
bereits auf den ersten Term zeigt, sodass while(terms.next())
dazu führt, dass der erste Term übersprungen wird.
Verwenden Sie stattdessen eine for-Schleife:
%Vor%Um den Code von der akzeptierten Antwort zu ändern:
%Vor%