Skip to content

Commit e046777

Browse files
committed
[bugfix] Make sure the content of a typed Lucene Full Text field can actually be parsed as that XDM type
1 parent 16742a3 commit e046777

1 file changed

Lines changed: 28 additions & 18 deletions

File tree

extensions/indexes/lucene/src/main/java/org/exist/indexing/lucene/LuceneFieldConfig.java

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -212,39 +212,49 @@ protected void processText(CharSequence text, Document luceneDoc) {
212212
}
213213
}
214214

215-
private Field convertToField(String content) {
215+
private Field convertToField(final String content) {
216216
try {
217217
switch (type) {
218218
case Type.INTEGER:
219219
case Type.LONG:
220220
case Type.UNSIGNED_LONG:
221-
long lvalue = Long.parseLong(content);
222-
return new LongField(fieldName, lvalue, LongField.TYPE_STORED);
221+
final long longValue = new IntegerValue(content, type).getLong();
222+
return new LongField(fieldName, longValue, LongField.TYPE_STORED);
223+
223224
case Type.INT:
224225
case Type.UNSIGNED_INT:
225226
case Type.SHORT:
226227
case Type.UNSIGNED_SHORT:
227-
int ivalue = Integer.parseInt(content);
228-
return new IntField(fieldName, ivalue, IntField.TYPE_STORED);
228+
final int intValue = new IntegerValue(content, type).getInt();
229+
return new IntField(fieldName, intValue, IntField.TYPE_STORED);
230+
229231
case Type.DECIMAL:
232+
final double decimalValue = new DecimalValue(content).getDouble();
233+
return new DoubleField(fieldName, decimalValue, DoubleField.TYPE_STORED);
234+
230235
case Type.DOUBLE:
231-
double dvalue = Double.parseDouble(content);
232-
return new DoubleField(fieldName, dvalue, DoubleField.TYPE_STORED);
236+
final double doubleValue = new DoubleValue(content).getDouble();
237+
return new DoubleField(fieldName, doubleValue, DoubleField.TYPE_STORED);
238+
233239
case Type.FLOAT:
234-
float fvalue = Float.parseFloat(content);
235-
return new FloatField(fieldName, fvalue, FloatField.TYPE_STORED);
240+
final float floatValue = new FloatValue(content).getFloat();
241+
return new FloatField(fieldName, floatValue, FloatField.TYPE_STORED);
242+
236243
case Type.DATE:
237-
DateValue dv = new DateValue(content);
238-
long dl = dateToLong(dv);
239-
return new LongField(fieldName, dl, LongField.TYPE_STORED);
244+
final DateValue dateValue = new DateValue(content);
245+
final long longDateValue = dateToLong(dateValue);
246+
return new LongField(fieldName, longDateValue, LongField.TYPE_STORED);
247+
240248
case Type.TIME:
241-
TimeValue tv = new TimeValue(content);
242-
long tl = timeToLong(tv);
243-
return new LongField(fieldName, tl, LongField.TYPE_STORED);
249+
final TimeValue timeValue = new TimeValue(content);
250+
final long longTimeValue = timeToLong(timeValue);
251+
return new LongField(fieldName, longTimeValue, LongField.TYPE_STORED);
252+
244253
case Type.DATE_TIME:
245-
DateTimeValue dtv = new DateTimeValue(content);
246-
String dateStr = dateTimeToString(dtv);
247-
return new TextField(fieldName, dateStr, Field.Store.YES);
254+
final DateTimeValue dateTimeValue = new DateTimeValue(content);
255+
final String strDateTimeValue = dateTimeToString(dateTimeValue);
256+
return new TextField(fieldName, strDateTimeValue, Field.Store.YES);
257+
248258
default:
249259
return new TextField(fieldName, content, store ? Field.Store.YES : Field.Store.NO);
250260
}

0 commit comments

Comments
 (0)