0

次のコードを使用して整数値にインデックスを付けています

String key = hmap.get("key");
System.out.println("key == "+Integer.parseInt(key));
if(key!=null && key.trim().length()>0)
        doc.add(new IntField("kv", Integer.parseInt(key),IndexFieldTypes.getFieldType(INDEX_STORE_FIELD)));

問題は、'key' が '50' の場合、'key== 50' という行が適切に出力されますが、'doc.add' 行に達すると次の例外がスローされることです。

java.lang.IllegalArgumentException: type.numericType() must be INT but got null
at org.apache.lucene.document.IntField.<init>(IntField.java:171)

誰かが理解できますか。

4

1 に答える 1

1

IntFieldを持っている必要がありNumericFieldTypeますFieldType.NumericType.INT。もちろん、私はあなたのIndexFieldTypesクラスについて詳しい知識はありませんが、デフォルトINDEX_STORE_FIELDには数値型がないと思います (当然、null 以外の場合、lucene は数値としてインデックスを作成しようとします)。

必ずしもフィールド タイプを渡す必要はないかもしれませんIntFieldが、次のようにすることができます。

doc.add(new IntField("kv", Integer.parseInt(key), Field.Store.YES));

FieldType を定義する必要がある場合は、 の既存の機能とは異なるタイプを使用するか、IndexFieldTypesロジックを実装してそこから を作成しますIntField。または、取得後に NumericFieldType を次のように設定します。

FieldType type = IndexFieldTypes.getFieldType(INDEX_STORE_FIELD);
type.setNumericFieldType(FieldType.NumericType.INT);
doc.add(new IntField("kv", Integer.parseInt(key), type));
于 2013-09-27T23:37:54.050 に答える