2012-08-14 57 views
9

在我用下面的线索引方法:如何使用Lucene的TermVector 4.0

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

然而,在Lucene的4.0这个构造已被废弃,new TextField应该用来代替new Field

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

有没有一种方法包括术语向量在我的Lucene索引4.0与新构造?

感谢

回答

11

文本字段是谁需要长期无向量索引字段用户一个方便的类。如果您需要条款向量,只需使用Field即可。它需要的代码几行,因为你需要首先创建的FieldType一个实例,设置storeTermVectorstokenizer为true,然后在Field构造函数中使用这个FieldType实例。

12

我有同样的问题,所以我只是简单地创建了自己的领域:

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); 
} 

}

希望这有助于