in nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java [405:459]
private static Document toDocument(final String docId, final DocumentUpdateRequest request) throws IOException {
final Document result = new Document();
// id
result.add(new org.apache.lucene.document.StringField("_id", docId, Store.YES));
result.add(new SortedDocValuesField("_id", new BytesRef(docId)));
// partition (optional)
if (request.hasPartition()) {
result.add(new org.apache.lucene.document.StringField("_partition", request.getPartition(), Store.NO));
}
final CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
for (Field field : request.getFields()) {
// Underscore-prefix is reserved.
if (field.getName().startsWith("_")) {
continue;
}
if (field instanceof TextField) {
var f = (TextField) field;
result.add(new org.apache.lucene.document.TextField(
f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO));
} else if (field instanceof StringField) {
var f = (StringField) field;
result.add(new org.apache.lucene.document.KeywordField(
f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO));
} else if (field instanceof DoubleField) {
var f = (DoubleField) field;
result.add(new org.apache.lucene.document.DoubleField(
f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO));
} else if (field instanceof StoredField) {
var f = (StoredField) field;
var val = f.getValue();
if (val instanceof String) {
result.add(new org.apache.lucene.document.StoredField(f.getName(), (String) val));
} else if (val instanceof Number) {
result.add(new org.apache.lucene.document.StoredField(f.getName(), ((Number) val).doubleValue()));
} else if (val instanceof byte[]) {
try {
final CharBuffer buf = utf8Decoder.decode(ByteBuffer.wrap((byte[]) val));
result.add(new org.apache.lucene.document.StoredField(f.getName(), buf.toString()));
} catch (final CharacterCodingException e) {
result.add(new org.apache.lucene.document.StoredField(f.getName(), (byte[]) val));
}
} else {
throw new WebApplicationException(field + " is not valid", Status.BAD_REQUEST);
}
} else {
throw new WebApplicationException(field + " is not valid", Status.BAD_REQUEST);
}
}
return result;
}