如何使用TermVector Lucene 4.0

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

Field contentsField = new Field("contents", new FileReader(f), Field.TermVector.YES); 

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

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

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

谢谢

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

我遇到了同样的问题,所以我只是创建了自己的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); } 

}

希望这可以帮助