Index: IndexReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/IndexReader.java,v retrieving revision 1.9 diff -c -r1.9 IndexReader.java *** IndexReader.java 15 Feb 2002 18:59:42 -0000 1.9 --- IndexReader.java 13 May 2002 03:36:13 -0000 *************** *** 160,165 **** --- 160,171 ---- return directory.fileExists("segments"); } + /** Returns the names of all searchable fields in the index + @throws IOException if there is a problem accessing the index. + */ + abstract public String[] getIndexedFieldNames() throws IOException; + + /** Returns the number of documents in this index. */ abstract public int numDocs(); *************** *** 331,334 **** directory.deleteFile("write.lock"); directory.deleteFile("commit.lock"); } ! } --- 337,341 ---- directory.deleteFile("write.lock"); directory.deleteFile("commit.lock"); } ! ! } Index: SegmentReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/SegmentReader.java,v retrieving revision 1.4 diff -c -r1.4 SegmentReader.java *** SegmentReader.java 8 Feb 2002 19:39:42 -0000 1.4 --- SegmentReader.java 13 May 2002 03:36:15 -0000 *************** *** 220,225 **** --- 220,236 ---- return fieldsReader.size(); } + public String[] getIndexedFieldNames() { + //I think lucene is jdk1.1 compliant + //check if we get multiple field info's of same names... + Vector v = new Vector(); + for (int i = 0; i < this.fieldInfos.size(); i++) { + FieldInfo fi = fieldInfos.fieldInfo(i); + if (fi.isIndexed) v.add(fi.name); + } + return (String[]) v.toArray(new String[v.size()]); + } + public final byte[] norms(String field) throws IOException { Norm norm = (Norm)norms.get(field); if (norm == null) Index: SegmentsReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/SegmentsReader.java,v retrieving revision 1.5 diff -c -r1.5 SegmentsReader.java *** SegmentsReader.java 10 Feb 2002 22:59:12 -0000 1.5 --- SegmentsReader.java 13 May 2002 03:36:17 -0000 *************** *** 107,112 **** --- 107,129 ---- int i = readerIndex(n); // find segment num readers[i].doDelete(n - starts[i]); // dispatch to segment reader } + + public final String[] getIndexedFieldNames() { + Hashtable h = new Hashtable(); + for (int i = 0; i < this.readers.length; i++) { + FieldInfos fieldInfos = this.readers[i].fieldInfos; + for (int j = 0; j < fieldInfos.size(); j++) { + FieldInfo fi = fieldInfos.fieldInfo(j); + if (fi.isIndexed) h.put(fi.name, Boolean.TRUE); + } + } + java.util.Enumeration it = h.keys(); + java.util.Vector v = new java.util.Vector(); + while (it.hasMoreElements()) { + v.add(it.nextElement()); + } + return (String[]) v.toArray(new String[v.size()]); + } private final int readerIndex(int n) { // find reader for doc n: int lo = 0; // search starts array