11

インデックス作成方法では、次の行を使用します。

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

ただし、Lucene 4.0 では、このコンストラクターは非推奨であり、new TextField代わりに使用する必要がありnew Fieldます。

しかし、問題は、コンストラクターでTextField受け入れられないことです。TermVector

新しいコンストラクターを使用して Lucene 4.0 のインデックス作成に用語ベクトルを含める方法はありますか?

ありがとう

4

3 に答える 3

14

同じ問題が発生したので、自分のフィールドを作成しただけです。

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

}

お役に立てれば

于 2012-08-15T03:41:40.163 に答える
13

TextField は、単語ベクトルのないインデックス付きフィールドが必要なユーザー向けの便利なクラスです。項ベクトルが必要な場合は、Fieldを使用してください。最初にFieldTypeのインスタンスを作成し、 trueに設定storeTermVectorsしてからコンストラクターでこのインスタンスを使用する必要があるため、さらに数行のコードが必要です。tokenizerFieldTypeField

于 2012-08-14T14:01:53.047 に答える