? src/test/org/apache/lucene/index/TestIndexReader.java Index: src/java/org/apache/lucene/index/IndexReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/IndexReader.java,v retrieving revision 1.11 diff -u -c -r1.11 IndexReader.java *** src/java/org/apache/lucene/index/IndexReader.java 7 Nov 2002 05:55:39 -0000 1.11 --- src/java/org/apache/lucene/index/IndexReader.java 12 Nov 2002 20:11:20 -0000 *************** *** 56,61 **** --- 56,63 ---- import java.io.IOException; import java.io.File; + import java.util.Collection; + import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.Lock; *************** *** 301,306 **** --- 303,316 ---- writeLock = null; } } + + /** + * Return a list of all unique field names which exist in the index pointed to by + * this IndexReader. + * @return Collection of Strings indicating the names of the fields + * @throws IOException if there is a problem with accessing the index + */ + public abstract Collection getFieldNames() throws IOException; /** * Returns true iff the index in the named directory is Index: src/java/org/apache/lucene/index/SegmentReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/SegmentReader.java,v retrieving revision 1.6 diff -u -c -r1.6 SegmentReader.java *** src/java/org/apache/lucene/index/SegmentReader.java 7 Nov 2002 05:55:39 -0000 1.6 --- src/java/org/apache/lucene/index/SegmentReader.java 12 Nov 2002 20:11:20 -0000 *************** *** 55,69 **** */ import java.io.IOException; ! import java.util.Hashtable; import java.util.Enumeration; import java.util.Vector; - import org.apache.lucene.util.BitVector; - import org.apache.lucene.store.Directory; - import org.apache.lucene.store.Lock; - import org.apache.lucene.store.InputStream; import org.apache.lucene.document.Document; final class SegmentReader extends IndexReader { private boolean closeDirectory = false; --- 55,71 ---- */ import java.io.IOException; ! import java.util.Collection; import java.util.Enumeration; + import java.util.HashSet; + import java.util.Hashtable; + import java.util.Set; import java.util.Vector; import org.apache.lucene.document.Document; + import org.apache.lucene.store.InputStream; + import org.apache.lucene.store.Lock; + import org.apache.lucene.util.BitVector; final class SegmentReader extends IndexReader { private boolean closeDirectory = false; *************** *** 73,79 **** private FieldsReader fieldsReader; TermInfosReader tis; ! BitVector deletedDocs = null; private boolean deletedDocsDirty = false; --- 75,81 ---- private FieldsReader fieldsReader; TermInfosReader tis; ! BitVector deletedDocs = null; private boolean deletedDocsDirty = false; *************** *** 113,119 **** proxStream = directory.openFile(segment + ".prx"); openNorms(); } ! final synchronized void doClose() throws IOException { if (deletedDocsDirty) { synchronized (directory) { // in- & inter-process sync --- 115,121 ---- proxStream = directory.openFile(segment + ".prx"); openNorms(); } ! final synchronized void doClose() throws IOException { if (deletedDocsDirty) { synchronized (directory) { // in- & inter-process sync *************** *** 256,262 **** private final void openNorms() throws IOException { for (int i = 0; i < fieldInfos.size(); i++) { FieldInfo fi = fieldInfos.fieldInfo(i); ! if (fi.isIndexed) norms.put(fi.name, new Norm(directory.openFile(segment + ".f" + fi.number))); } --- 258,264 ---- private final void openNorms() throws IOException { for (int i = 0; i < fieldInfos.size(); i++) { FieldInfo fi = fieldInfos.fieldInfo(i); ! if (fi.isIndexed) norms.put(fi.name, new Norm(directory.openFile(segment + ".f" + fi.number))); } *************** *** 271,274 **** --- 273,287 ---- } } } + + // javadoc inherited + public Collection getFieldNames() throws IOException { + // maintain a unique set of field names + Set fieldSet = new HashSet(); + for (int i = 0; i < fieldInfos.size(); i++) { + FieldInfo fi = fieldInfos.fieldInfo(i); + fieldSet.add(fi.name); + } + return fieldSet; + } } Index: src/java/org/apache/lucene/index/SegmentsReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/SegmentsReader.java,v retrieving revision 1.9 diff -u -c -r1.9 SegmentsReader.java *** src/java/org/apache/lucene/index/SegmentsReader.java 7 Nov 2002 05:55:39 -0000 1.9 --- src/java/org/apache/lucene/index/SegmentsReader.java 12 Nov 2002 20:11:20 -0000 *************** *** 55,64 **** */ import java.io.IOException; import java.util.Hashtable; - import org.apache.lucene.store.Directory; import org.apache.lucene.document.Document; /** * FIXME: Describe class SegmentsReader here. --- 55,68 ---- */ import java.io.IOException; + import java.util.Collection; + import java.util.HashSet; import java.util.Hashtable; + import java.util.Iterator; + import java.util.Set; import org.apache.lucene.document.Document; + import org.apache.lucene.store.Directory; /** * FIXME: Describe class SegmentsReader here. *************** *** 174,179 **** --- 178,199 ---- for (int i = 0; i < readers.length; i++) readers[i].close(); } + + // javadoc inherited + public Collection getFieldNames() throws IOException { + // maintain a unique set of field names + Set fieldSet = new HashSet(); + for (int i = 0; i < readers.length; i++) { + SegmentReader reader = readers[i]; + Collection names = reader.getFieldNames(); + // iterate through the field names and add them to the set + for (Iterator iterator = names.iterator(); iterator.hasNext();) { + String s = (String) iterator.next(); + fieldSet.add(s); + } + } + return fieldSet; + } } class SegmentsTermEnum extends TermEnum {