为lucene中的整数编制索引

为lucene中的整数编制索引,lucene,Lucene,我使用下面的代码来索引一个整数值 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_FI

我使用下面的代码来索引一个整数值

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)
java.lang.IllegalArgumentException:type.numericType()必须为INT,但必须为null
位于org.apache.lucene.document.IntField(IntField.java:171)

有人能猜出来。

一个
IntField
必须有
NumericFieldType
FieldType.numericfype.INT
。当然,我对您的
IndexFieldTypes
类不太了解,但我猜它的默认
INDEX\u STORE\u FIELD
没有数字类型(正确地说,如果它是非空的,lucene将尝试将其作为一个数字进行索引)

您可能不一定需要将字段类型传递给
IntField
,但可以执行以下操作:

doc.add(new IntField("kv", Integer.parseInt(key), Field.Store.YES));
如果确实需要定义字段类型,请使用与
IndexFieldTypes
中现有功能不同的类型,或实现逻辑以从中创建
IntField
。或者只需在检索后设置NumericFieldType,如:

FieldType type = IndexFieldTypes.getFieldType(INDEX_STORE_FIELD);
type.setNumericFieldType(FieldType.NumericType.INT);
doc.add(new IntField("kv", Integer.parseInt(key), type));

您正在为调试输出执行
parseInt(minTicketPrice)
,但随后在实际的
文档中使用
parseInt(key)
。add
调用,因此您根本没有检查是否传入了正确的值。哦,很抱歉,它的“key”仅出现在
parseInt
文档中。add(new IntField(“kv”),Integer.parseInt(key),Field.Store.YES)为我工作。