--- LuceneTrunkFreshPull/src/java/org/apache/lucene/index/ParallelReader.java	2006-04-21 13:48:58.000000000 -1000
+++ LuceneTrunk/src/java/org/apache/lucene/index/ParallelReader.java	2006-05-01 11:04:51.000000000 -1000
@@ -60,21 +60,34 @@
  /** Construct a ParallelReader. */
   public ParallelReader() throws IOException { super(null); }
     
- /** Add an IndexReader. */
+ /** Add an IndexReader to access fields already stored in the index */
   public void add(IndexReader reader) throws IOException {
-    add(reader, false);
+    add(reader, null, false);
   }
-
+  
+  /** Add an IndexReader to access the specified field names.
+   * Specifying the fields is important when searches may be done on fields that are not yet on any document.
+   */
+  public void add(IndexReader reader, List fields) throws IOException {
+      add(reader, fields, false);
+  }
+  
  /** Add an IndexReader whose stored fields will not be returned.  This can
-  * accellerate search when stored fields are only needed from a subset of
+  * accelerate search when stored fields are only needed from a subset of
   * the IndexReaders.
+  */
+  public void add(IndexReader reader, boolean ignoreStoredFields) throws IOException {
+      add(reader, null, ignoreStoredFields);
+  }
+
+ /** Add an IndexReader to access the specified field names, and whose stored fields will not be returned.
   * 
   * @throws IllegalArgumentException if not all indexes contain the same number 
   *     of documents
   * @throws IllegalArgumentException if not all indexes have the same value 
   *     of {@link IndexReader#maxDoc()}
   */
-  public void add(IndexReader reader, boolean ignoreStoredFields)
+  public void add(IndexReader reader, List fields, boolean ignoreStoredFields)
     throws IOException {
 
     if (readers.size() == 0) {
@@ -90,7 +103,8 @@
       throw new IllegalArgumentException
         ("All readers must have same numDocs: "+numDocs+"!="+reader.numDocs());
     
-    Iterator i = reader.getFieldNames(IndexReader.FieldOption.ALL).iterator();
+    Iterator i = fields==null ? reader.getFieldNames(IndexReader.FieldOption.ALL).iterator() :
+                                fields.iterator();
     while (i.hasNext()) {                         // update fieldToReader map
       String field = (String)i.next();
       if (fieldToReader.get(field) == null)
@@ -118,7 +132,7 @@
   // delete in all readers
   protected void doDelete(int n) throws IOException {
     for (int i = 0; i < readers.size(); i++) {
-      ((IndexReader)readers.get(i)).doDelete(n);
+      ((IndexReader)readers.get(i)).deleteDocument(n);
     }
     hasDeletions = true;
   }
@@ -126,7 +140,7 @@
   // undeleteAll in all readers
   protected void doUndeleteAll() throws IOException {
     for (int i = 0; i < readers.size(); i++) {
-      ((IndexReader)readers.get(i)).doUndeleteAll();
+      ((IndexReader)readers.get(i)).undeleteAll();
     }
     hasDeletions = false;
   }
