List of usage examples for org.apache.solr.schema SchemaField write
public void write(TextResponseWriter writer, String name, IndexableField val) throws IOException
From source file:com.mindquarry.search.solr.request.JSONWriter.java
License:Open Source License
public void writeDoc(String name, Collection<Fieldable> fields, Set<String> returnFields, Map pseudoFields) throws IOException { writer.write('{'); incLevel();//ww w . j av a 2 s . c o m HashMap<String, MultiValueField> multi = new HashMap<String, MultiValueField>(); boolean first = true; for (Fieldable ff : fields) { String fname = ff.name(); if (returnFields != null && !returnFields.contains(fname)) { continue; } // if the field is multivalued, it may have other values further // on... so // build up a list for each multi-valued field. SchemaField sf = schema.getField(fname); if (sf.multiValued()) { MultiValueField mf = multi.get(fname); if (mf == null) { mf = new MultiValueField(sf, ff); multi.put(fname, mf); } else { mf.fields.add(ff); } } else { // not multi-valued, so write it immediately. if (first) { first = false; } else { writer.write(','); } indent(); writeKey(fname, true); sf.write(this, fname, ff); } } for (MultiValueField mvf : multi.values()) { if (first) { first = false; } else { writer.write(','); } indent(); writeKey(mvf.sfield.getName(), true); boolean indentArrElems = false; if (doIndent) { // heuristic... TextField is probably the only field type likely // to be long enough // to warrant indenting individual values. indentArrElems = (mvf.sfield.getType() instanceof TextField); } writer.write('['); boolean firstArrElem = true; incLevel(); for (Fieldable ff : mvf.fields) { if (firstArrElem) { firstArrElem = false; } else { writer.write(','); } if (indentArrElems) indent(); mvf.sfield.write(this, null, ff); } writer.write(']'); decLevel(); } if (pseudoFields != null && pseudoFields.size() > 0) { writeMap(null, pseudoFields, true, first); } decLevel(); writer.write('}'); }