Skip to content

Commit 5a5cf1b

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 2b2b4d2 commit 5a5cf1b

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

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
@@ -209,39 +209,49 @@ protected void processText(CharSequence text, Document luceneDoc) {
209209
}
210210
}
211211

212-
private Field convertToField(String content) {
212+
private Field convertToField(final String content) {
213213
try {
214214
switch (type) {
215215
case Type.INTEGER:
216216
case Type.LONG:
217217
case Type.UNSIGNED_LONG:
218-
long lvalue = Long.parseLong(content);
219-
return new LongField(fieldName, lvalue, LongField.TYPE_STORED);
218+
final long longValue = new IntegerValue(content, type).getLong();
219+
return new LongField(fieldName, longValue, LongField.TYPE_STORED);
220+
220221
case Type.INT:
221222
case Type.UNSIGNED_INT:
222223
case Type.SHORT:
223224
case Type.UNSIGNED_SHORT:
224-
int ivalue = Integer.parseInt(content);
225-
return new IntField(fieldName, ivalue, IntField.TYPE_STORED);
225+
final int intValue = new IntegerValue(content, type).getInt();
226+
return new IntField(fieldName, intValue, IntField.TYPE_STORED);
227+
226228
case Type.DECIMAL:
229+
final double decimalValue = new DecimalValue(content).getDouble();
230+
return new DoubleField(fieldName, decimalValue, DoubleField.TYPE_STORED);
231+
227232
case Type.DOUBLE:
228-
double dvalue = Double.parseDouble(content);
229-
return new DoubleField(fieldName, dvalue, DoubleField.TYPE_STORED);
233+
final double doubleValue = new DoubleValue(content).getDouble();
234+
return new DoubleField(fieldName, doubleValue, DoubleField.TYPE_STORED);
235+
230236
case Type.FLOAT:
231-
float fvalue = Float.parseFloat(content);
232-
return new FloatField(fieldName, fvalue, FloatField.TYPE_STORED);
237+
final float floatValue = new FloatValue(content).getFloat();
238+
return new FloatField(fieldName, floatValue, FloatField.TYPE_STORED);
239+
233240
case Type.DATE:
234-
DateValue dv = new DateValue(content);
235-
long dl = dateToLong(dv);
236-
return new LongField(fieldName, dl, LongField.TYPE_STORED);
241+
final DateValue dateValue = new DateValue(content);
242+
final long longDateValue = dateToLong(dateValue);
243+
return new LongField(fieldName, longDateValue, LongField.TYPE_STORED);
244+
237245
case Type.TIME:
238-
TimeValue tv = new TimeValue(content);
239-
long tl = timeToLong(tv);
240-
return new LongField(fieldName, tl, LongField.TYPE_STORED);
246+
final TimeValue timeValue = new TimeValue(content);
247+
final long longTimeValue = timeToLong(timeValue);
248+
return new LongField(fieldName, longTimeValue, LongField.TYPE_STORED);
249+
241250
case Type.DATE_TIME:
242-
DateTimeValue dtv = new DateTimeValue(content);
243-
String dateStr = dateTimeToString(dtv);
244-
return new TextField(fieldName, dateStr, Field.Store.YES);
251+
final DateTimeValue dateTimeValue = new DateTimeValue(content);
252+
final String strDateTimeValue = dateTimeToString(dateTimeValue);
253+
return new TextField(fieldName, strDateTimeValue, Field.Store.YES);
254+
245255
default:
246256
return new TextField(fieldName, content, store ? Field.Store.YES : Field.Store.NO);
247257
}

0 commit comments

Comments
 (0)