user3456072
user3456072

Reputation: 7

How can I change TermFreVector in Lucene 4.0

Here is the code:

public int docLength(String filename) throws IOException {
    int length = 0;
    TermFreqVector t = indexReader.getTermFreqVector(0, "contents");
    for (int i = 0; i < t.getTermFrequencies().length; i++) {
        length += t.getTermFrequencies()[i];
    }
    return length;
}

public int docLength(int id) throws IOException {
    int length = 0;
    TermFreqVector t = indexReader.getTermFreqVector(id, "contents");
    for (int i = 0; i < t.getTermFrequencies().length; i++) {
        length += t.getTermFrequencies()[i];
    }
    return length;
}

The error is :

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    TermFreqVector cannot be resolved to a type
    The method getTermFreqVector(int, String) is undefined for the type IndexReader

    at BM25.docLength(BM25.java:96)
    at BM25.avgDocLength(BM25.java:130)

Upvotes: 0

Views: 90

Answers (1)

femtoRgon
femtoRgon

Reputation: 33351

Accessing and traversing term vectors changed significantly in 4.0. The Migration Guide is a very helpful resource on that and other changes from 3.6 to 4.0.

In this case, you'll need to access a Terms instance through a call to IndexReader.getTermVector:

int length = 0;
TermEnum terms = indexReader.getTermVector(id, "contents").iterator();
while (terms.next())
    length += terms.totalTermFreq(null);
return length;

Upvotes: 1

Related Questions