2013-09-27 64 views
0

我使用followng代碼索引一個整數值索引中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_FIELD))); 

的問題是,如果「關鍵」是「50」行「鍵== 50」獲取打印好,但它的時候達到'doc.add'行它拋出以下異常:

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

有人可以弄清楚。

+0

你做'parseInt函數(minTicketPrice)'爲您調試輸出,但後來使用'parseInt函數(密鑰)'實際'doc.add '電話,所以你根本沒有檢查你是否通過了一個適當的價值。 –

+0

哦,對不起'只有'parseInt'' – manish

回答

0

一個IntField必須有一個NumericFieldTypeFieldType.NumericType.INT。當然,我沒有對你的IndexFieldTypes類的深入瞭解,但我猜想它是默認的INDEX_STORE_FIELD沒有數字類型(正確的話,如果它是非空的,lucene會嘗試索引爲數字)。

你不一定需要一個字段類型傳遞給IntField不過,你可能只是這樣做:

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

如果你需要定義的FieldType,無論是從現有的功能,使用不同類型的IndexFieldTypes,或執行邏輯以從中創建IntField。或者只設置NumericFieldType它retreived後,如:

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

'doc.add(新的IntField(「kv」,Integer.parseInt(key),Field.Store.YES));''爲我工作。 – manish