Index: lucene/core/src/java/org/apache/lucene/index/ParallelAtomicReader.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/ParallelAtomicReader.java (revision 1291772) +++ lucene/core/src/java/org/apache/lucene/index/ParallelAtomicReader.java (working copy) @@ -98,20 +98,33 @@ throw new IllegalArgumentException("All readers must have same maxDoc: "+maxDoc+"!="+reader.maxDoc()); } } - + + // build FieldInfos and fieldToReader map: for (final AtomicReader reader : this.parallelReaders) { final FieldInfos readerFieldInfos = reader.getFieldInfos(); - for(FieldInfo fieldInfo : readerFieldInfos) { // update fieldToReader map + for (FieldInfo fieldInfo : readerFieldInfos) { // NOTE: first reader having a given field "wins": if (!fieldToReader.containsKey(fieldInfo.name)) { fieldInfos.add(fieldInfo); fieldToReader.put(fieldInfo.name, reader); - if (fieldInfo.isIndexed) { - this.fields.addField(fieldInfo.name, reader.terms(fieldInfo.name)); + } + } + } + + // build Fields instance + for (final AtomicReader reader : this.parallelReaders) { + final Fields readerFields = reader.fields(); + if (readerFields != null) { + final FieldsEnum it = readerFields.iterator(); + String name; + while ((name = it.next()) != null) { + // only add if the reader responsible for that field name is the current: + if (fieldToReader.get(name) == reader) { + this.fields.addField(name, it.terms()); } } } - } + } // do this finally so any Exceptions occurred before don't affect refcounts: if (!closeSubReaders) { Index: lucene/core/src/test/org/apache/lucene/index/TestParallelTermEnum.java =================================================================== --- lucene/core/src/test/org/apache/lucene/index/TestParallelTermEnum.java (revision 1291772) +++ lucene/core/src/test/org/apache/lucene/index/TestParallelTermEnum.java (working copy) @@ -79,8 +79,6 @@ FieldsEnum fe = pr.fields().iterator(); String f = fe.next(); - assertEquals("field0", f); - f = fe.next(); assertEquals("field1", f); Terms terms = fe.terms();