/** * Get a document field raw value or list of raw values. * * <pre><code> * assert document.title = "Big bad wolf" * assert document.keyword[0] == "wolf" * assert document.keyword[1] == "red hook" * </code></pre> * * @param document the document * @param fieldName the field name * @return a raw value or a list of raw values if the field is multivalued */ public static Object get(Document document, String fieldName) { @SuppressWarnings("unchecked") List<Field> fields = (List<Field>) DefaultGroovyMethods.collect(document.getFields(fieldName)); switch (fields.size()) { case 0: if (document instanceof ScoredDocument) { List<Object> exps = new ArrayList<Object>(); for (Field f : ((ScoredDocument) document).getExpressions()) { if (f.getName().equals(fieldName)) { exps.add(getFieldRawValue(f)); } } if (exps.size() == 0) { return null; } if (exps.size() == 1) { return exps.get(0); } return exps; } return null; case 1: return getFieldRawValue(fields.get(0)); default: List<Object> exps = new ArrayList<Object>(); for (Field f : fields) { exps.add(getFieldRawValue(f)); } return exps; } }