如何使用TermVector Lucene 4.0

use*_*704 11 java lucene search

在索引方法中,我使用以下行:

Field contentsField = new Field("contents", new FileReader(f), Field.TermVector.YES);
Run Code Online (Sandbox Code Playgroud)

但是,在Lucene 4.0中,不推荐使用此构造函数,而new TextField应使用它来代替new Field.

但问题TextField是它TermVector在构造函数中不接受.

有没有办法在使用新构造函数的Lucene 4.0索引中包含Term Vector?

谢谢

ama*_*mas 14

我有同样的问题,所以我只是创建了自己的Field:

public class VecTextField extends Field {

/* Indexed, tokenized, not stored. */
public static final FieldType TYPE_NOT_STORED = new FieldType();

/* Indexed, tokenized, stored. */
public static final FieldType TYPE_STORED = new FieldType();

static {
    TYPE_NOT_STORED.setIndexed(true);
    TYPE_NOT_STORED.setTokenized(true);
    TYPE_NOT_STORED.setStoreTermVectors(true);
    TYPE_NOT_STORED.setStoreTermVectorPositions(true);
    TYPE_NOT_STORED.freeze();

    TYPE_STORED.setIndexed(true);
    TYPE_STORED.setTokenized(true);
    TYPE_STORED.setStored(true);
    TYPE_STORED.setStoreTermVectors(true);
    TYPE_STORED.setStoreTermVectorPositions(true);
    TYPE_STORED.freeze();
}

// TODO: add sugar for term vectors...?

/** Creates a new TextField with Reader value. */
public VecTextField(String name, Reader reader, Store store) {
    super(name, reader, store == Store.YES ? TYPE_STORED : TYPE_NOT_STORED);
}

/** Creates a new TextField with String value. */
public VecTextField(String name, String value, Store store) {
    super(name, value, store == Store.YES ? TYPE_STORED : TYPE_NOT_STORED);
}

/** Creates a new un-stored TextField with TokenStream value. */
public VecTextField(String name, TokenStream stream) {
    super(name, stream, TYPE_NOT_STORED);
}
Run Code Online (Sandbox Code Playgroud)

}

希望这可以帮助


jpo*_*ntz 13

对于需要没有术语向量的索引字段的用户,TextField是一个便利类.如果您需要术语向量,只需使用Field.它需要的代码几行,因为你需要创建一个实例的FieldType第一,设置storeTermVectorstokenizer为true,然后用这个FieldType在实例Field构造函数.