@Override public void writeDocList(String name, DocList ids, Set<String> fields, Map otherFields) throws IOException { boolean includeScore = false; if (fields != null) { includeScore = fields.contains("score"); if (fields.size() == 0 || (fields.size() == 1 && includeScore) || fields.contains("*")) { fields = null; // null means return all stored fields } } int sz = ids.size(); writeMapOpener(includeScore ? 4 : 3); incLevel(); writeKey("numFound", false); writeInt(null, ids.matches()); writeMapSeparator(); writeKey("start", false); writeInt(null, ids.offset()); if (includeScore) { writeMapSeparator(); writeKey("maxScore", false); writeFloat(null, ids.maxScore()); } writeMapSeparator(); // indent(); writeKey("docs", false); writeArrayOpener(sz); incLevel(); boolean first = true; SolrIndexSearcher searcher = req.getSearcher(); DocIterator iterator = ids.iterator(); for (int i = 0; i < sz; i++) { int id = iterator.nextDoc(); Document doc = searcher.doc(id, fields); if (first) { first = false; } else { writeArraySeparator(); } indent(); writeDoc(null, doc, fields, (includeScore ? iterator.score() : 0.0f), includeScore); } decLevel(); writeArrayCloser(); if (otherFields != null) { writeMap(null, otherFields, true, false); } decLevel(); indent(); writeMapCloser(); }
protected void processScores( ResponseBuilder rb, DocList dl, IndexSchema schema, SolrIndexSearcher searcher) throws IOException { StringBuilder sb = new StringBuilder(); Set<String> fields = Collections.singleton(schema.getUniqueKeyField().getName()); for (DocIterator iter = dl.iterator(); iter.hasNext(); ) { sb.append(schema.printableUniqueKey(searcher.doc(iter.nextDoc(), fields))) .append(':') .append(iter.score()) .append(','); } if (sb.length() > 0) { rb.rsp.addToLog("responseLog", sb.substring(0, sb.length() - 1)); } }