private Map<String, Object> loadSourceIfNeeded() { if (source != null) { return source; } if (sourceAsBytes != null) { Tuple<XContentType, Map<String, Object>> tuple = sourceAsMapAndType(sourceAsBytes); sourceContentType = tuple.v1(); source = tuple.v2(); return source; } try { JustSourceFieldsVisitor sourceFieldVisitor = new JustSourceFieldsVisitor(); reader.document(docId, sourceFieldVisitor); BytesReference source = sourceFieldVisitor.source(); if (source == null) { this.source = ImmutableMap.of(); this.sourceContentType = null; } else { Tuple<XContentType, Map<String, Object>> tuple = sourceAsMapAndType(source); this.sourceContentType = tuple.v1(); this.source = tuple.v2(); } } catch (Exception e) { throw new ElasticsearchParseException("failed to parse / load source", e); } return this.source; }
@Override protected boolean matchDoc(int doc) { if (fieldsVisitorEnabled) { fieldsVisitor.reset(); try { reader.document(doc, fieldsVisitor); } catch (IOException e) { throw Throwables.propagate(e); } } for (LuceneCollectorExpression expression : expressions) { expression.setNextDocId(doc); } Boolean value = condition.value(); if (value == null) { return false; } return value; }
private List<Document> lookupDocs(Term term, final LoadFieldCallback lfc) throws IOException { final List<Document> documents = new ArrayList<Document>(); final TermFilter tf = new TermFilter(term); try { for (AtomicReaderContext arc : searcher.getIndexReader().leaves()) { AtomicReader ar = arc.reader(); Bits liveDocs = ar.getLiveDocs(); DocIdSet docSet = tf.getDocIdSet(arc, liveDocs); if (docSet != null) { DocIdSetIterator disi = docSet.iterator(); if (disi != null) { int docId; while ((docId = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) { DocumentStoredFieldVisitor fv = new DocumentStoredFieldVisitor() { @Override public StoredFieldVisitor.Status needsField(FieldInfo fieldInfo) throws IOException { if (lfc == null || lfc.loadField(fieldInfo.name)) { return StoredFieldVisitor.Status.YES; } return StoredFieldVisitor.Status.NO; } }; ar.document(docId, fv); documents.add(fv.getDocument()); } } } } } catch (IOException io) { throw new IndexException(io); } return documents; }