2012-08-14 3 views
9

を使用する方法:は、私は次の行を使用インデクシング方法でTermVectorのLucene 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

のTextFieldは、用語ベクトルのないインデックスフィールドを必要とするユーザーのための便利なクラスです。用語ベクトルが必要な場合は、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); 
} 

}

希望これは

を支援
関連する問題