package com.senseidb.clue.commands; import com.senseidb.clue.ClueContext; import org.apache.lucene.document.Document; import org.apache.lucene.index.LeafReader; import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexableField; import org.apache.lucene.util.BytesRef; import java.io.PrintStream; import java.util.List; public class DumpDocCommand extends ClueCommand { public DumpDocCommand(ClueContext ctx) { super(ctx); } @Override public String getName() { return "dumpdoc"; } @Override public String help() { return "dumps all the stored fields in the document"; } @Override public void execute(String[] args, PrintStream out) throws Exception { if (args.length != 1) { out.println("usage: doc"); return; } int doc = Integer.parseInt(args[0]); IndexReader reader = ctx.getIndexReader(); List<LeafReaderContext> leaves = reader.leaves(); for (LeafReaderContext ctx : leaves) { LeafReader atomicReader = ctx.reader(); int docID = doc - ctx.docBase; if (docID >= atomicReader.maxDoc()) { continue; } if (docID >= 0) { Document storedData = atomicReader.document(docID); if (storedData == null) continue; for (IndexableField indexableField : storedData.getFields()) { out.print(indexableField.name() + ":"); final Number number = indexableField.numericValue(); if (number != null) { out.println(number); continue; } final String strData = indexableField.stringValue(); if (strData != null) { out.println(strData); continue; } final BytesRef bytesRef = indexableField.binaryValue(); if (bytesRef != null) { out.println(bytesRef); } out.println("<unsupported value type>"); } } } } }