2011-04-21 17 views
6

para cualquier documento, el términoFreqVector es siempre nulo. Estoy seguro de que los documentos están en la colección y el campo existe. Entonces, dónde está el problema ?Lucene: termFreqVector siempre es nulo?

for (int i = 0; i < reader.numDocs(); i ++) {
TermFreqVector TFV = reader.getTermFreqVector (i, "etiquetas");

gracias

Respuesta

6

¿Estás seguro de que está indexando con sus campos con Field.TermVector.YES? Aquí hay un ejemplo de trabajo:

Directory directory = new RAMDirectory(); 
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); 
MaxFieldLength mlf = MaxFieldLength.UNLIMITED; 
IndexWriter writer = new IndexWriter(directory, analyzer, true, mlf); 

Document doc = new Document(); 
doc.add(new Field("tags", "foo bar", Field.Store.NO, 
     Field.Index.ANALYZED, Field.TermVector.YES)); 

writer.addDocument(doc); 
writer.close(); 

IndexReader reader = IndexReader.open(directory); 
for (int i = 0; i < reader.numDocs(); i++) { 
    TermFreqVector tfv = reader.getTermFreqVector(i, "tags"); 
    System.out.println(tfv); 
} 
+0

que el rock, gracias – user680406

+0

@ user680406 ningún problema :) – WhiteFang34

+2

@ user680406: Nunca se debe utilizar numDocs() para acceder a los documentos en el índice, sino más bien maxDoc() en su lugar. Una vez que el índice tenga eliminaciones, no alcanzará todos los documentos. –

Cuestiones relacionadas