You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/11/01 09:39:30 UTC

svn commit: r1635898 [3/6] - in /lucene/dev/branches/lucene6005/lucene: analysis/common/src/test/org/apache/lucene/collation/ analysis/icu/src/test/org/apache/lucene/collation/ analysis/uima/src/test/org/apache/lucene/analysis/uima/ backward-codecs/src...

Modified: lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StandardDirectoryReader.java Sat Nov  1 08:39:27 2014
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.lucene.document.FieldTypes;
 import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
@@ -35,27 +36,36 @@ final class StandardDirectoryReader exte
   private final IndexWriter writer;
   private final SegmentInfos segmentInfos;
   private final boolean applyAllDeletes;
+  private final FieldTypes fieldTypes;
   
   /** called only from static open() methods */
-  StandardDirectoryReader(Directory directory, LeafReader[] readers, IndexWriter writer,
-    SegmentInfos sis, boolean applyAllDeletes) {
+  StandardDirectoryReader(FieldTypes fieldTypes, Directory directory, LeafReader[] readers, IndexWriter writer,
+    SegmentInfos sis, boolean applyAllDeletes) throws IOException {
     super(directory, readers);
+    this.fieldTypes = fieldTypes;
     this.writer = writer;
     this.segmentInfos = sis;
     this.applyAllDeletes = applyAllDeletes;
   }
 
+  @Override
+  public FieldTypes getFieldTypes() {
+    return fieldTypes;
+  }
+
   /** called from DirectoryReader.open(...) methods */
   static DirectoryReader open(final Directory directory, final IndexCommit commit) throws IOException {
     return new SegmentInfos.FindSegmentsFile<DirectoryReader>(directory) {
       @Override
       protected DirectoryReader doBody(String segmentFileName) throws IOException {
         SegmentInfos sis = SegmentInfos.readCommit(directory, segmentFileName);
+        // nocommit fixme: can't be passing null analyzers
+        FieldTypes fieldTypes = FieldTypes.getFieldTypes(sis.getUserData(), null, null);
         final SegmentReader[] readers = new SegmentReader[sis.size()];
         for (int i = sis.size()-1; i >= 0; i--) {
           boolean success = false;
           try {
-            readers[i] = new SegmentReader(sis.info(i), IOContext.READ);
+            readers[i] = new SegmentReader(fieldTypes, sis.info(i), IOContext.READ);
             success = true;
           } finally {
             if (!success) {
@@ -63,7 +73,7 @@ final class StandardDirectoryReader exte
             }
           }
         }
-        return new StandardDirectoryReader(directory, readers, null, sis, false);
+        return new StandardDirectoryReader(fieldTypes, directory, readers, null, sis, false);
       }
     }.run(commit);
   }
@@ -79,6 +89,13 @@ final class StandardDirectoryReader exte
     final Directory dir = writer.getDirectory();
 
     final SegmentInfos segmentInfos = infos.clone();
+
+    // Carry over current schema:
+    segmentInfos.getUserData().put(FieldTypes.FIELD_TYPES_KEY, writer.fieldTypes.writeToString());
+
+    // nocommit fixme: can't be passing null analyzers
+    FieldTypes fieldTypes = FieldTypes.getFieldTypes(segmentInfos.getUserData(), null, null);
+
     int infosUpto = 0;
     boolean success = false;
     try {
@@ -91,6 +108,7 @@ final class StandardDirectoryReader exte
         assert info.info.dir == dir;
         final ReadersAndUpdates rld = writer.readerPool.get(info, true);
         try {
+          // nocommit this has writer's fieldTypes, not ours:
           final SegmentReader reader = rld.getReadOnlyClone(IOContext.READ);
           if (reader.numDocs() > 0 || writer.getKeepFullyDeletedSegments()) {
             // Steal the ref:
@@ -107,7 +125,7 @@ final class StandardDirectoryReader exte
       
       writer.incRefDeleter(segmentInfos);
       
-      StandardDirectoryReader result = new StandardDirectoryReader(dir,
+      StandardDirectoryReader result = new StandardDirectoryReader(fieldTypes, dir,
           readers.toArray(new SegmentReader[readers.size()]), writer,
           segmentInfos, applyAllDeletes);
       success = true;
@@ -142,7 +160,10 @@ final class StandardDirectoryReader exte
     }
     
     SegmentReader[] newReaders = new SegmentReader[infos.size()];
-    
+
+    // nocommit fixme: can't be passing null analyzers
+    FieldTypes fieldTypes = FieldTypes.getFieldTypes(infos.getUserData(), null, null);
+
     for (int i = infos.size() - 1; i>=0; i--) {
       SegmentCommitInfo commitInfo = infos.info(i);
 
@@ -163,7 +184,7 @@ final class StandardDirectoryReader exte
         if (oldReader == null || commitInfo.info.getUseCompoundFile() != oldReader.getSegmentInfo().info.getUseCompoundFile()) {
 
           // this is a new reader; in case we hit an exception we can decRef it safely
-          newReader = new SegmentReader(commitInfo, IOContext.READ);
+          newReader = new SegmentReader(fieldTypes, commitInfo, IOContext.READ);
           newReaders[i] = newReader;
         } else {
           if (oldReader.getSegmentInfo().getDelGen() == commitInfo.getDelGen()
@@ -191,10 +212,10 @@ final class StandardDirectoryReader exte
 
             if (oldReader.getSegmentInfo().getDelGen() == commitInfo.getDelGen()) {
               // only DV updates
-              newReaders[i] = new SegmentReader(commitInfo, oldReader, oldReader.getLiveDocs(), oldReader.numDocs());
+              newReaders[i] = new SegmentReader(fieldTypes, commitInfo, oldReader, oldReader.getLiveDocs(), oldReader.numDocs());
             } else {
               // both DV and liveDocs have changed
-              newReaders[i] = new SegmentReader(commitInfo, oldReader);
+              newReaders[i] = new SegmentReader(fieldTypes, commitInfo, oldReader);
             }
           }
         }
@@ -205,7 +226,8 @@ final class StandardDirectoryReader exte
         }
       }
     }    
-    return new StandardDirectoryReader(directory, newReaders, null, infos, false);
+
+    return new StandardDirectoryReader(fieldTypes, directory, newReaders, null, infos, false);
   }
 
   // TODO: move somewhere shared if it's useful elsewhere

Modified: lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StoredFieldVisitor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StoredFieldVisitor.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StoredFieldVisitor.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/StoredFieldVisitor.java Sat Nov  1 08:39:27 2014
@@ -20,7 +20,7 @@ package org.apache.lucene.index;
 import java.io.IOException;
 
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.DocumentStoredFieldVisitor;
+import org.apache.lucene.document.Document2StoredFieldVisitor; // javadocs
 
 /**
  * Expert: provides a low-level means of accessing the stored field
@@ -33,7 +33,7 @@ import org.apache.lucene.document.Docume
  * fields for most codecs is not reeentrant and you will see
  * strange exceptions as a result.
  *
- * <p>See {@link DocumentStoredFieldVisitor}, which is a
+ * <p>See {@link Document2StoredFieldVisitor}, which is a
  * <code>StoredFieldVisitor</code> that builds the
  * {@link Document} containing all stored fields.  This is
  * used by {@link IndexReader#document(int)}.
@@ -93,4 +93,4 @@ public abstract class StoredFieldVisitor
     /** STOP: don't visit this field and stop processing any other fields for this document. */
     STOP
   }
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/TrackingIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/TrackingIndexWriter.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/TrackingIndexWriter.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/index/TrackingIndexWriter.java Sat Nov  1 08:39:27 2014
@@ -48,18 +48,18 @@ public class TrackingIndexWriter {
   }
 
   /** Calls {@link
-   *  IndexWriter#updateDocument(Term,IndexDocument,Analyzer)}
+   *  IndexWriter#updateDocument(Term,Iterable,Analyzer)}
    *  and returns the generation that reflects this change. */
-  public long updateDocument(Term t, IndexDocument d, Analyzer a) throws IOException {
+  public long updateDocument(Term t, Iterable<? extends IndexableField> d, Analyzer a) throws IOException {
     writer.updateDocument(t, d, a);
     // Return gen as of when indexing finished:
     return indexingGen.get();
   }
 
   /** Calls {@link
-   *  IndexWriter#updateDocument(Term,IndexDocument)} and
+   *  IndexWriter#updateDocument(Term,Iterable)} and
    *  returns the generation that reflects this change. */
-  public long updateDocument(Term t, IndexDocument d) throws IOException {
+  public long updateDocument(Term t, Iterable<? extends IndexableField> d) throws IOException {
     writer.updateDocument(t, d);
     // Return gen as of when indexing finished:
     return indexingGen.get();
@@ -68,7 +68,7 @@ public class TrackingIndexWriter {
   /** Calls {@link
    *  IndexWriter#updateDocuments(Term,Iterable,Analyzer)}
    *  and returns the generation that reflects this change. */
-  public long updateDocuments(Term t, Iterable<? extends IndexDocument> docs, Analyzer a) throws IOException {
+  public long updateDocuments(Term t, Iterable<? extends Iterable<? extends IndexableField>> docs, Analyzer a) throws IOException {
     writer.updateDocuments(t, docs, a);
     // Return gen as of when indexing finished:
     return indexingGen.get();
@@ -77,7 +77,7 @@ public class TrackingIndexWriter {
   /** Calls {@link
    *  IndexWriter#updateDocuments(Term,Iterable)} and returns
    *  the generation that reflects this change. */
-  public long updateDocuments(Term t, Iterable<? extends IndexDocument> docs) throws IOException {
+  public long updateDocuments(Term t, Iterable<? extends Iterable<? extends IndexableField>> docs) throws IOException {
     writer.updateDocuments(t, docs);
     // Return gen as of when indexing finished:
     return indexingGen.get();
@@ -124,9 +124,9 @@ public class TrackingIndexWriter {
   }
 
   /** Calls {@link
-   *  IndexWriter#addDocument(IndexDocument,Analyzer)} and
+   *  IndexWriter#addDocument(Iterable,Analyzer)} and
    *  returns the generation that reflects this change. */
-  public long addDocument(IndexDocument d, Analyzer a) throws IOException {
+  public long addDocument(Iterable<? extends IndexableField> d, Analyzer a) throws IOException {
     writer.addDocument(d, a);
     // Return gen as of when indexing finished:
     return indexingGen.get();
@@ -135,15 +135,15 @@ public class TrackingIndexWriter {
   /** Calls {@link
    *  IndexWriter#addDocuments(Iterable,Analyzer)} and
    *  returns the generation that reflects this change.  */
-  public long addDocuments(Iterable<? extends IndexDocument> docs, Analyzer a) throws IOException {
+  public long addDocuments(Iterable<? extends Iterable<? extends IndexableField>> docs, Analyzer a) throws IOException {
     writer.addDocuments(docs, a);
     // Return gen as of when indexing finished:
     return indexingGen.get();
   }
 
-  /** Calls {@link IndexWriter#addDocument(IndexDocument)}
+  /** Calls {@link IndexWriter#addDocument(Iterable)}
    *  and returns the generation that reflects this change. */
-  public long addDocument(IndexDocument d) throws IOException {
+  public long addDocument(Iterable<? extends IndexableField> d) throws IOException {
     writer.addDocument(d);
     // Return gen as of when indexing finished:
     return indexingGen.get();
@@ -151,7 +151,7 @@ public class TrackingIndexWriter {
 
   /** Calls {@link IndexWriter#addDocuments(Iterable)} and
    *  returns the generation that reflects this change. */
-  public long addDocuments(Iterable<? extends IndexDocument> docs) throws IOException {
+  public long addDocuments(Iterable<? extends Iterable<? extends IndexableField>> docs) throws IOException {
     writer.addDocuments(docs);
     // Return gen as of when indexing finished:
     return indexingGen.get();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/java/org/apache/lucene/search/IndexSearcher.java Sat Nov  1 08:39:27 2014
@@ -32,13 +32,15 @@ import java.util.concurrent.ExecutorServ
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.document.Document2;
+import org.apache.lucene.document.FieldTypes;
 import org.apache.lucene.index.DirectoryReader; // javadocs
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.index.IndexReaderContext;
+import org.apache.lucene.index.IndexWriter; // javadocs
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.index.ReaderUtil;
-import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.index.StoredFieldVisitor;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermContext;
@@ -47,7 +49,6 @@ import org.apache.lucene.search.similari
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.store.NIOFSDirectory;    // javadoc
 import org.apache.lucene.util.ThreadInterruptedException;
-import org.apache.lucene.index.IndexWriter; // javadocs
 
 /** Implements search over a single IndexReader.
  *
@@ -181,10 +182,10 @@ public class IndexSearcher {
   }
 
   /** 
-   * Sugar for <code>.getIndexReader().document(docID)</code> 
-   * @see IndexReader#document(int) 
+   * Sugar for <code>.getIndexReader().document2(docID)</code> 
+   * @see IndexReader#document2(int) 
    */
-  public StoredDocument doc(int docID) throws IOException {
+  public Document2 doc(int docID) throws IOException {
     return reader.document(docID);
   }
 
@@ -200,7 +201,7 @@ public class IndexSearcher {
    * Sugar for <code>.getIndexReader().document(docID, fieldsToLoad)</code>
    * @see IndexReader#document(int, Set) 
    */
-  public StoredDocument doc(int docID, Set<String> fieldsToLoad) throws IOException {
+  public Document2 doc(int docID, Set<String> fieldsToLoad) throws IOException {
     return reader.document(docID, fieldsToLoad);
   }
 

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestDemo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestDemo.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestDemo.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestDemo.java Sat Nov  1 08:39:27 2014
@@ -27,7 +27,6 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.*;
 import org.apache.lucene.store.Directory;
@@ -66,8 +65,8 @@ public class TestDemo extends LuceneTest
     assertEquals(1, hits.totalHits);
     // Iterate through the results:
     for (int i = 0; i < hits.scoreDocs.length; i++) {
-      StoredDocument hitDoc = isearcher.doc(hits.scoreDocs[i].doc);
-      assertEquals(text, hitDoc.get("fieldname"));
+      Document2 hitDoc = isearcher.doc(hits.scoreDocs[i].doc);
+      assertEquals(text, hitDoc.getString("fieldname"));
     }
 
     // Test simple phrase query

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearch.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearch.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearch.java Sat Nov  1 08:39:27 2014
@@ -150,8 +150,8 @@ public class TestSearch extends LuceneTe
 
         out.println(hits.length + " total results");
         for (int i = 0 ; i < hits.length && i < 10; i++) {
-          StoredDocument d = searcher.doc(hits[i].doc);
-          out.println(i + " " + hits[i].score + " " + d.get("contents"));
+          Document2 d = searcher.doc(hits[i].doc);
+          out.println(i + " " + hits[i].score + " " + d.getString("contents"));
         }
       }
       reader.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearchForDuplicates.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearchForDuplicates.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearchForDuplicates.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/TestSearchForDuplicates.java Sat Nov  1 08:39:27 2014
@@ -47,77 +47,77 @@ public class TestSearchForDuplicates ext
    *        validate this output and make any changes to the checkHits method.
    */
   public void testRun() throws Exception {
-      StringWriter sw = new StringWriter();
-      PrintWriter pw = new PrintWriter(sw, true);
-      final int MAX_DOCS = atLeast(225);
-      doTest(random(), pw, false, MAX_DOCS);
-      pw.close();
-      sw.close();
-      String multiFileOutput = sw.toString();
-      //System.out.println(multiFileOutput);
-
-      sw = new StringWriter();
-      pw = new PrintWriter(sw, true);
-      doTest(random(), pw, true, MAX_DOCS);
-      pw.close();
-      sw.close();
-      String singleFileOutput = sw.toString();
+    StringWriter sw = new StringWriter();
+    PrintWriter pw = new PrintWriter(sw, true);
+    final int MAX_DOCS = atLeast(225);
+    doTest(random(), pw, false, MAX_DOCS);
+    pw.close();
+    sw.close();
+    String multiFileOutput = sw.toString();
+    //System.out.println(multiFileOutput);
+
+    sw = new StringWriter();
+    pw = new PrintWriter(sw, true);
+    doTest(random(), pw, true, MAX_DOCS);
+    pw.close();
+    sw.close();
+    String singleFileOutput = sw.toString();
 
-      assertEquals(multiFileOutput, singleFileOutput);
+    assertEquals(multiFileOutput, singleFileOutput);
   }
 
 
   private void doTest(Random random, PrintWriter out, boolean useCompoundFiles, int MAX_DOCS) throws Exception {
-      Directory directory = newDirectory();
-      Analyzer analyzer = new MockAnalyzer(random);
-      IndexWriterConfig conf = newIndexWriterConfig(analyzer);
-      final MergePolicy mp = conf.getMergePolicy();
-      mp.setNoCFSRatio(useCompoundFiles ? 1.0 : 0.0);
-      IndexWriter writer = new IndexWriter(directory, conf);
-      if (VERBOSE) {
-        System.out.println("TEST: now build index MAX_DOCS=" + MAX_DOCS);
-      }
+    Directory directory = newDirectory();
+    Analyzer analyzer = new MockAnalyzer(random);
+    IndexWriterConfig conf = newIndexWriterConfig(analyzer);
+    final MergePolicy mp = conf.getMergePolicy();
+    mp.setNoCFSRatio(useCompoundFiles ? 1.0 : 0.0);
+    IndexWriter writer = new IndexWriter(directory, conf);
+    if (VERBOSE) {
+      System.out.println("TEST: now build index MAX_DOCS=" + MAX_DOCS);
+    }
 
-      for (int j = 0; j < MAX_DOCS; j++) {
-        Document2 d = writer.newDocument();
-        d.addLargeText(PRIORITY_FIELD, HIGH_PRIORITY);
-        d.addInt(ID_FIELD, j);
-        writer.addDocument(d);
-      }
-      writer.close();
+    for (int j = 0; j < MAX_DOCS; j++) {
+      Document2 d = writer.newDocument();
+      d.addLargeText(PRIORITY_FIELD, HIGH_PRIORITY);
+      d.addInt(ID_FIELD, j);
+      writer.addDocument(d);
+    }
+    writer.close();
 
-      // try a search without OR
-      IndexReader reader = DirectoryReader.open(directory);
-      IndexSearcher searcher = newSearcher(reader);
-
-      Query query = new TermQuery(new Term(PRIORITY_FIELD, HIGH_PRIORITY));
-      out.println("Query: " + query.toString(PRIORITY_FIELD));
-      if (VERBOSE) {
-        System.out.println("TEST: search query=" + query);
-      }
+    // try a search without OR
+    IndexReader reader = DirectoryReader.open(directory);
+    IndexSearcher searcher = newSearcher(reader);
+
+    Query query = new TermQuery(new Term(PRIORITY_FIELD, HIGH_PRIORITY));
+    out.println("Query: " + query.toString(PRIORITY_FIELD));
+    if (VERBOSE) {
+      System.out.println("TEST: search query=" + query);
+    }
 
-      final Sort sort = new Sort(SortField.FIELD_SCORE,
-                                 new SortField(ID_FIELD, SortField.Type.INT));
+    final Sort sort = new Sort(SortField.FIELD_SCORE,
+                               new SortField(ID_FIELD, SortField.Type.INT));
 
-      ScoreDoc[] hits = searcher.search(query, null, MAX_DOCS, sort).scoreDocs;
-      printHits(out, hits, searcher);
-      checkHits(hits, MAX_DOCS, searcher);
-
-      // try a new search with OR
-      searcher = newSearcher(reader);
-      hits = null;
-
-      BooleanQuery booleanQuery = new BooleanQuery();
-      booleanQuery.add(new TermQuery(new Term(PRIORITY_FIELD, HIGH_PRIORITY)), BooleanClause.Occur.SHOULD);
-      booleanQuery.add(new TermQuery(new Term(PRIORITY_FIELD, MED_PRIORITY)), BooleanClause.Occur.SHOULD);
-      out.println("Query: " + booleanQuery.toString(PRIORITY_FIELD));
-
-      hits = searcher.search(booleanQuery, null, MAX_DOCS, sort).scoreDocs;
-      printHits(out, hits, searcher);
-      checkHits(hits, MAX_DOCS, searcher);
+    ScoreDoc[] hits = searcher.search(query, null, MAX_DOCS, sort).scoreDocs;
+    printHits(out, hits, searcher);
+    checkHits(hits, MAX_DOCS, searcher);
+
+    // try a new search with OR
+    searcher = newSearcher(reader);
+    hits = null;
+
+    BooleanQuery booleanQuery = new BooleanQuery();
+    booleanQuery.add(new TermQuery(new Term(PRIORITY_FIELD, HIGH_PRIORITY)), BooleanClause.Occur.SHOULD);
+    booleanQuery.add(new TermQuery(new Term(PRIORITY_FIELD, MED_PRIORITY)), BooleanClause.Occur.SHOULD);
+    out.println("Query: " + booleanQuery.toString(PRIORITY_FIELD));
+
+    hits = searcher.search(booleanQuery, null, MAX_DOCS, sort).scoreDocs;
+    printHits(out, hits, searcher);
+    checkHits(hits, MAX_DOCS, searcher);
 
-      reader.close();
-      directory.close();
+    reader.close();
+    directory.close();
   }
 
 
@@ -125,8 +125,8 @@ public class TestSearchForDuplicates ext
     out.println(hits.length + " total results\n");
     for (int i = 0 ; i < hits.length; i++) {
       if ( i < 10 || (i > 94 && i < 105) ) {
-        StoredDocument d = searcher.doc(hits[i].doc);
-        out.println(i + " " + d.get(ID_FIELD));
+        Document2 d = searcher.doc(hits[i].doc);
+        out.println(i + " " + d.getInt(ID_FIELD));
       }
     }
   }
@@ -135,10 +135,9 @@ public class TestSearchForDuplicates ext
     assertEquals("total results", expectedCount, hits.length);
     for (int i = 0 ; i < hits.length; i++) {
       if (i < 10 || (i > 94 && i < 105) ) {
-        StoredDocument d = searcher.doc(hits[i].doc);
-        assertEquals("check " + i, String.valueOf(i), d.get(ID_FIELD));
+        Document2 d = searcher.doc(hits[i].doc);
+        assertEquals("check " + i, i, d.getInt(ID_FIELD).intValue());
       }
     }
   }
-
 }

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat2.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat2.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat2.java Sat Nov  1 08:39:27 2014
@@ -27,6 +27,7 @@ import org.apache.lucene.index.FieldInfo
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
@@ -83,8 +84,8 @@ public class TestBlockPostingsFormat2 ex
   public void testDFBlockSize() throws Exception {
     Document doc = newDocument();
     for (int i = 0; i < Lucene50PostingsFormat.BLOCK_SIZE; i++) {
-      for (Field f : doc.getFields()) {
-        f.setStringValue(f.name() + " " + f.name() + "_2");
+      for (IndexableField f : doc.getFields()) {
+        ((Field) f).setStringValue(f.name() + " " + f.name() + "_2");
       }
       iw.addDocument(doc);
     }
@@ -94,8 +95,8 @@ public class TestBlockPostingsFormat2 ex
   public void testDFBlockSizeMultiple() throws Exception {
     Document doc = newDocument();
     for (int i = 0; i < Lucene50PostingsFormat.BLOCK_SIZE * 16; i++) {
-      for (Field f : doc.getFields()) {
-        f.setStringValue(f.name() + " " + f.name() + "_2");
+      for (IndexableField f : doc.getFields()) {
+        ((Field) f).setStringValue(f.name() + " " + f.name() + "_2");
       }
       iw.addDocument(doc);
     }
@@ -105,8 +106,8 @@ public class TestBlockPostingsFormat2 ex
   public void testTTFBlockSize() throws Exception {
     Document doc = newDocument();
     for (int i = 0; i < Lucene50PostingsFormat.BLOCK_SIZE/2; i++) {
-      for (Field f : doc.getFields()) {
-        f.setStringValue(f.name() + " " + f.name() + " " + f.name() + "_2 " + f.name() + "_2");
+      for (IndexableField f : doc.getFields()) {
+        ((Field) f).setStringValue(f.name() + " " + f.name() + " " + f.name() + "_2 " + f.name() + "_2");
       }
       iw.addDocument(doc);
     }
@@ -116,7 +117,7 @@ public class TestBlockPostingsFormat2 ex
   public void testTTFBlockSizeMultiple() throws Exception {
     Document doc = newDocument();
     for (int i = 0; i < Lucene50PostingsFormat.BLOCK_SIZE/2; i++) {
-      for (Field f : doc.getFields()) {
+      for (IndexableField f : doc.getFields()) {
         String proto = (f.name() + " " + f.name() + " " + f.name() + " " + f.name() + " " 
                        + f.name() + "_2 " + f.name() + "_2 " + f.name() + "_2 " + f.name() + "_2");
         StringBuilder val = new StringBuilder();
@@ -124,7 +125,7 @@ public class TestBlockPostingsFormat2 ex
           val.append(proto);
           val.append(" ");
         }
-        f.setStringValue(val.toString());
+        ((Field) f).setStringValue(val.toString());
       }
       iw.addDocument(doc);
     }

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/codecs/perfield/TestPerFieldDocValuesFormat.java Sat Nov  1 08:39:27 2014
@@ -27,6 +27,7 @@ import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.asserting.AssertingCodec;
 import org.apache.lucene.document.BinaryDocValuesField;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.NumericDocValuesField;
@@ -38,7 +39,6 @@ import org.apache.lucene.index.IndexWrit
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.index.RandomCodec;
-import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
@@ -111,8 +111,8 @@ public class TestPerFieldDocValuesFormat
     assertEquals(1, hits.totalHits);
     // Iterate through the results:
     for (int i = 0; i < hits.scoreDocs.length; i++) {
-      StoredDocument hitDoc = isearcher.doc(hits.scoreDocs[i].doc);
-      assertEquals(text, hitDoc.get("fieldname"));
+      Document2 hitDoc = isearcher.doc(hits.scoreDocs[i].doc);
+      assertEquals(text, hitDoc.getString("fieldname"));
       assert ireader.leaves().size() == 1;
       NumericDocValues dv = ireader.leaves().get(0).reader().getNumericDocValues("dv1");
       assertEquals(5, dv.get(hits.scoreDocs[i].doc));

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestBinaryDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestBinaryDocument.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestBinaryDocument.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestBinaryDocument.java Sat Nov  1 08:39:27 2014
@@ -1,14 +1,5 @@
 package org.apache.lucene.document;
 
-import java.nio.charset.StandardCharsets;
-
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.StoredDocument;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.LuceneTestCase;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -26,6 +17,14 @@ import org.apache.lucene.util.LuceneTest
  * limitations under the License.
  */
 
+import java.nio.charset.StandardCharsets;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.RandomIndexWriter;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.LuceneTestCase;
+
 /**
  * Tests {@link Document} class.
  */
@@ -58,17 +57,17 @@ public class TestBinaryDocument extends 
     
     /** open a reader and fetch the document */ 
     IndexReader reader = writer.getReader();
-    StoredDocument docFromReader = reader.document(0);
+    Document2 docFromReader = reader.document(0);
     assertTrue(docFromReader != null);
     
     /** fetch the binary stored field and compare it's content with the original one */
-    BytesRef bytes = docFromReader.getBinaryValue("binaryStored");
+    BytesRef bytes = docFromReader.getBinary("binaryStored");
     assertNotNull(bytes);
     String binaryFldStoredTest = new String(bytes.bytes, bytes.offset, bytes.length, StandardCharsets.UTF_8);
     assertTrue(binaryFldStoredTest.equals(binaryValStored));
     
     /** fetch the string field and compare it's content with the original one */
-    String stringFldStoredTest = docFromReader.get("stringStored");
+    String stringFldStoredTest = docFromReader.getString("stringStored");
     assertTrue(stringFldStoredTest.equals(binaryValStored));
     
     writer.close();
@@ -92,13 +91,13 @@ public class TestBinaryDocument extends 
     
     /** open a reader and fetch the document */ 
     IndexReader reader = writer.getReader();
-    StoredDocument docFromReader = reader.document(0);
+    Document2 docFromReader = reader.document(0);
     assertTrue(docFromReader != null);
     
     /** fetch the binary compressed field and compare it's content with the original one */
-    String binaryFldCompressedTest = new String(CompressionTools.decompress(docFromReader.getBinaryValue("binaryCompressed")), StandardCharsets.UTF_8);
+    String binaryFldCompressedTest = new String(CompressionTools.decompress(docFromReader.getBinary("binaryCompressed")), StandardCharsets.UTF_8);
     assertTrue(binaryFldCompressedTest.equals(binaryValCompressed));
-    assertTrue(CompressionTools.decompressString(docFromReader.getBinaryValue("stringCompressed")).equals(binaryValCompressed));
+    assertTrue(CompressionTools.decompressString(docFromReader.getBinary("stringCompressed")).equals(binaryValCompressed));
 
     writer.close();
     reader.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument.java Sat Nov  1 08:39:27 2014
@@ -27,9 +27,8 @@ import org.apache.lucene.analysis.Tokeni
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.FieldInfo.IndexOptions;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.RandomIndexWriter;
-import org.apache.lucene.index.StorableField;
-import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.PhraseQuery;
@@ -172,7 +171,7 @@ public class TestDocument extends Lucene
   public void testGetFieldsImmutable() {
     Document doc = makeDocumentWithFields();
     assertEquals(10, doc.getFields().size());
-    List<Field> fields = doc.getFields();
+    List<IndexableField> fields = doc.getFields();
     try {
       fields.add( new StringField("name", "value", Field.Store.NO) );
       fail("Document.getFields() should return immutable List");
@@ -279,14 +278,44 @@ public class TestDocument extends Lucene
     return doc;
   }
   
-  private void doAssert(StoredDocument doc) {
-    doAssert(new Document(doc), true);
+  private void doAssert(Document2 doc) {
+    doAssert(doc, true);
   }
+
+  private void doAssert(Document2 doc, boolean fromIndex) {
+    List<IndexableField> keywordFieldValues = doc.getFields("keyword");
+    List<IndexableField> textFieldValues = doc.getFields("text");
+    List<IndexableField> unindexedFieldValues = doc.getFields("unindexed");
+    List<IndexableField> unstoredFieldValues = doc.getFields("unstored");
+    
+    assertTrue(keywordFieldValues.size() == 2);
+    assertTrue(textFieldValues.size() == 2);
+    assertTrue(unindexedFieldValues.size() == 2);
+    // this test cannot work for documents retrieved from the index
+    // since unstored fields will obviously not be returned
+    if (!fromIndex) {
+      assertTrue(unstoredFieldValues.size() == 2);
+    }
+    
+    assertTrue(keywordFieldValues.get(0).stringValue().equals("test1"));
+    assertTrue(keywordFieldValues.get(1).stringValue().equals("test2"));
+    assertTrue(textFieldValues.get(0).stringValue().equals("test1"));
+    assertTrue(textFieldValues.get(1).stringValue().equals("test2"));
+    assertTrue(unindexedFieldValues.get(0).stringValue().equals("test1"));
+    assertTrue(unindexedFieldValues.get(1).stringValue().equals("test2"));
+    // this test cannot work for documents retrieved from the index
+    // since unstored fields will obviously not be returned
+    if (!fromIndex) {
+      assertTrue(unstoredFieldValues.get(0).stringValue().equals("test1"));
+      assertTrue(unstoredFieldValues.get(1).stringValue().equals("test2"));
+    }
+  }
+
   private void doAssert(Document doc, boolean fromIndex) {
-    StorableField[] keywordFieldValues = doc.getFields("keyword");
-    StorableField[] textFieldValues = doc.getFields("text");
-    StorableField[] unindexedFieldValues = doc.getFields("unindexed");
-    StorableField[] unstoredFieldValues = doc.getFields("unstored");
+    IndexableField[] keywordFieldValues = doc.getFields("keyword");
+    IndexableField[] textFieldValues = doc.getFields("text");
+    IndexableField[] unindexedFieldValues = doc.getFields("unindexed");
+    IndexableField[] unstoredFieldValues = doc.getFields("unstored");
     
     assertTrue(keywordFieldValues.length == 2);
     assertTrue(textFieldValues.length == 2);
@@ -336,8 +365,8 @@ public class TestDocument extends Lucene
     assertEquals(3, hits.length);
     int result = 0;
     for (int i = 0; i < 3; i++) {
-      StoredDocument doc2 = searcher.doc(hits[i].doc);
-      Field f = (Field) doc2.getField("id");
+      Document2 doc2 = searcher.doc(hits[i].doc);
+      IndexableField f = doc2.getField("id");
       if (f.stringValue().equals("id1")) result |= 1;
       else if (f.stringValue().equals("id2")) result |= 2;
       else if (f.stringValue().equals("id3")) result |= 4;
@@ -375,10 +404,10 @@ public class TestDocument extends Lucene
     RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
     iw.addDocument(doc);
     DirectoryReader ir = iw.getReader();
-    StoredDocument sdoc = ir.document(0);
-    assertEquals("5", sdoc.get("int"));
+    Document2 sdoc = ir.document(0);
+    assertEquals("5", sdoc.getString("int"));
     assertNull(sdoc.get("somethingElse"));
-    assertArrayEquals(new String[] { "5", "4" }, sdoc.getValues("int"));
+    assertArrayEquals(new String[] { "5", "4" }, sdoc.getStrings("int"));
     ir.close();
     iw.close();
     dir.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument2.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument2.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/document/TestDocument2.java Sat Nov  1 08:39:27 2014
@@ -37,7 +37,6 @@ import org.apache.lucene.index.MultiFiel
 import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.index.SortedNumericDocValues;
 import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.index.StoredDocument;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MatchAllDocsQuery;
@@ -84,7 +83,7 @@ public class TestDocument2 extends Lucen
     w.addDocument(doc);
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    assertEquals(1, s.search(fieldTypes.newTermQuery("binary", new byte[5]), 1).totalHits);
+    assertEquals(1, s.search(fieldTypes.newBinaryTermQuery("binary", new byte[5]), 1).totalHits);
     r.close();
     w.close();
     dir.close();
@@ -131,7 +130,7 @@ public class TestDocument2 extends Lucen
     doc.addStored("binary", new BytesRef(new byte[5]));
     w.addDocument(doc);
     IndexReader r = DirectoryReader.open(w, true);
-    assertEquals(new BytesRef(new byte[5]), r.document(0).getBinaryValue("binary"));
+    assertEquals(new BytesRef(new byte[5]), r.document(0).getBinary("binary"));
     r.close();
     w.close();
     dir.close();
@@ -234,18 +233,18 @@ public class TestDocument2 extends Lucen
     NumericDocValues ndv = MultiDocValues.getNumericValues(r, "float");
     assertNotNull(ndv);
     ScoreDoc hit = hits.scoreDocs[0];
-    StoredDocument storedDoc = r.document(hit.doc);
-    assertEquals("one", storedDoc.get("id"));
+    Document2 storedDoc = r.document(hit.doc);
+    assertEquals("one", storedDoc.getString("id"));
     assertEquals(3f, Float.intBitsToFloat((int) ndv.get(hit.doc)), .001f);
 
     hit = hits.scoreDocs[1];
     storedDoc = r.document(hit.doc);
-    assertEquals("three", storedDoc.get("id"));
+    assertEquals("three", storedDoc.getString("id"));
     assertEquals(7f, Float.intBitsToFloat((int) ndv.get(hit.doc)), .001f);
 
     hit = hits.scoreDocs[2];
     storedDoc = r.document(hit.doc);
-    assertEquals("two", storedDoc.get("id"));
+    assertEquals("two", storedDoc.getString("id"));
     assertEquals(2f, Float.intBitsToFloat((int) ndv.get(hit.doc)), .001f);
 
     // Make sure we can sort by the field:
@@ -574,10 +573,10 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    TopDocs hits = s.search(fieldTypes.newTermQuery("id", "0"), 1);
+    TopDocs hits = s.search(fieldTypes.newStringTermQuery("id", "0"), 1);
     assertEquals(1, hits.scoreDocs.length);
     assertEquals("0", r.document(hits.scoreDocs[0].doc).get("id"));
-    hits = s.search(fieldTypes.newTermQuery("id", "1"), 1);
+    hits = s.search(fieldTypes.newStringTermQuery("id", "1"), 1);
     assertEquals(1, hits.scoreDocs.length);
     assertEquals("1", r.document(hits.scoreDocs[0].doc).get("id"));
     r.close();
@@ -597,7 +596,7 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    TopDocs hits = s.search(fieldTypes.newTermQuery("id", 1L), 1);
+    TopDocs hits = s.search(fieldTypes.newLongTermQuery("id", 1L), 1);
     assertEquals(1, hits.scoreDocs.length);
     r.close();
     w.close();
@@ -616,7 +615,7 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    TopDocs hits = s.search(fieldTypes.newTermQuery("id", 1), 1);
+    TopDocs hits = s.search(fieldTypes.newIntTermQuery("id", 1), 1);
     assertEquals(1, hits.scoreDocs.length);
     r.close();
     w.close();
@@ -636,7 +635,7 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    TopDocs hits = s.search(fieldTypes.newTermQuery("id", new byte[1]), 1);
+    TopDocs hits = s.search(fieldTypes.newBinaryTermQuery("id", new byte[1]), 1);
     assertEquals(1, hits.scoreDocs.length);
     r.close();
     w.close();
@@ -663,10 +662,10 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     IndexSearcher s = newSearcher(r);
-    TopDocs hits = s.search(fieldTypes.newTermQuery("id", "0"), 1, fieldTypes.newSort("id"));
+    TopDocs hits = s.search(fieldTypes.newStringTermQuery("id", "0"), 1, fieldTypes.newSort("id"));
     assertEquals(1, hits.scoreDocs.length);
     assertEquals("0", r.document(hits.scoreDocs[0].doc).get("id"));
-    hits = s.search(fieldTypes.newTermQuery("id", "1"), 1);
+    hits = s.search(fieldTypes.newStringTermQuery("id", "1"), 1);
     assertEquals(1, hits.scoreDocs.length);
     assertEquals("1", r.document(hits.scoreDocs[0].doc).get("id"));
     r.close();
@@ -836,7 +835,7 @@ public class TestDocument2 extends Lucen
     dir.close();
   }
 
-  public void testFieldTypesAreSaved() throws Exception {
+  public void testExcFieldTypesAreSaved() throws Exception {
     Directory dir = newDirectory();
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig());
     Document2 doc = w.newDocument();
@@ -872,7 +871,7 @@ public class TestDocument2 extends Lucen
 
     IndexReader r = DirectoryReader.open(w, true);
     try {
-      fieldTypes.newTermQuery("foo", "bar");
+      fieldTypes.newStringTermQuery("foo", "bar");
       fail("did not hit exception");
     } catch (IllegalStateException ise) {
       // Expected
@@ -934,6 +933,46 @@ public class TestDocument2 extends Lucen
     dir.close();
   }
 
+  public void testBooleanType() throws Exception {
+    Directory dir = newDirectory();
+    IndexWriterConfig iwc = newIndexWriterConfig();
+    IndexWriter w = new IndexWriter(dir, iwc);
+
+    FieldTypes fieldTypes = w.getFieldTypes();
+
+    Document2 doc = w.newDocument();
+    doc.addBoolean("onsale", true);
+    w.addDocument(doc);
+
+    //w.close();
+    //DirectoryReader r = DirectoryReader.open(dir);
+    DirectoryReader r = DirectoryReader.open(w, true);
+    IndexSearcher s = newSearcher(r);
+    TopDocs hits = s.search(fieldTypes.newBooleanTermQuery("onsale", true), 1);
+    assertEquals(1, hits.totalHits);
+    doc = s.doc(hits.scoreDocs[0].doc);
+    assertEquals(true, doc.getBoolean("onsale"));
+    assertEquals(0, s.search(fieldTypes.newBooleanTermQuery("onsale", false), 1).totalHits);
+    r.close();
+    w.close();
+    dir.close();
+  }
+
+  public void testOnlyChangeFieldTypes() throws Exception {
+    Directory dir = newDirectory();
+    IndexWriter w = new IndexWriter(dir, newIndexWriterConfig());
+    w.commit();
+    FieldTypes fieldTypes = w.getFieldTypes();
+    fieldTypes.enableSorting("sorted");
+    w.close();
+
+    w = new IndexWriter(dir, newIndexWriterConfig());
+    fieldTypes = w.getFieldTypes();
+    assertTrue(fieldTypes.getSorted("sorted"));
+    w.close();
+    dir.close();
+  }
+
 
   // nocommit test per-field analyzers
 

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/Test4GBStoredFields.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/Test4GBStoredFields.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/Test4GBStoredFields.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/Test4GBStoredFields.java Sat Nov  1 08:39:27 2014
@@ -18,16 +18,16 @@ package org.apache.lucene.index;
  */
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.store.MMapDirectory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TimeUnits;
-import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
-
 import com.carrotsearch.randomizedtesting.annotations.TimeoutSuite;
 import com.carrotsearch.randomizedtesting.generators.RandomInts;
 
@@ -96,10 +96,10 @@ public class Test4GBStoredFields extends
     }
 
     DirectoryReader rd = DirectoryReader.open(dir);
-    StoredDocument sd = rd.document(numDocs - 1);
+    Document2 sd = rd.document(numDocs - 1);
     assertNotNull(sd);
     assertEquals(1, sd.getFields().size());
-    BytesRef valueRef = sd.getBinaryValue("fld");
+    BytesRef valueRef = sd.getBinary("fld");
     assertNotNull(valueRef);
     assertEquals(new BytesRef(value), valueRef);
     rd.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestAddIndexes.java Sat Nov  1 08:39:27 2014
@@ -1207,11 +1207,11 @@ public class TestAddIndexes extends Luce
     w.close();
     assertEquals(2, r3.numDocs());
     for(int docID=0;docID<2;docID++) {
-      StoredDocument d = r3.document(docID);
-      if (d.get("id").equals("1")) {
-        assertEquals("doc1 field1", d.get("f1"));
+      Document2 d = r3.document(docID);
+      if (d.getString("id").equals("1")) {
+        assertEquals("doc1 field1", d.getString("f1"));
       } else {
-        assertEquals("doc2 field2", d.get("f2"));
+        assertEquals("doc2 field2", d.getString("f2"));
       }
     }
     r3.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestCustomNorms.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestCustomNorms.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestCustomNorms.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestCustomNorms.java Sat Nov  1 08:39:27 2014
@@ -19,6 +19,7 @@ package org.apache.lucene.index;
 import java.io.IOException;
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.TextField;
@@ -70,8 +71,8 @@ public class TestCustomNorms extends Luc
     NumericDocValues norms = open.getNormValues(floatTestField);
     assertNotNull(norms);
     for (int i = 0; i < open.maxDoc(); i++) {
-      StoredDocument document = open.document(i);
-      float expected = Float.parseFloat(document.get(floatTestField));
+      Document2 document = open.document(i);
+      float expected = Float.parseFloat(document.getString(floatTestField));
       assertEquals(expected, Float.intBitsToFloat((int)norms.get(i)), 0.0f);
     }
     open.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReader.java Sat Nov  1 08:39:27 2014
@@ -56,10 +56,10 @@ public class TestDirectoryReader extends
     assertTrue(reader instanceof StandardDirectoryReader);
     FieldTypes fieldTypes = FieldTypes.getFieldTypes(reader.getIndexCommit(), new MockAnalyzer(random()));
     Set<String> unstored = DocHelper.getUnstored(fieldTypes);
-    StoredDocument newDoc1 = reader.document(0);
+    Document2 newDoc1 = reader.document(0);
     assertTrue(newDoc1 != null);
     assertEquals(DocHelper.numFields() - unstored.size(), DocHelper.numFields(newDoc1));
-    StoredDocument newDoc2 = reader.document(1);
+    Document2 newDoc2 = reader.document(1);
     assertTrue(newDoc2 != null);
     assertTrue(DocHelper.numFields(newDoc2) == DocHelper.numFields() - unstored.size());
     Terms vector = reader.getTermVectors(0).terms(DocHelper.TEXT_FIELD_2_KEY);
@@ -373,11 +373,11 @@ public class TestDirectoryReader extends
     writer.addDocument(doc);
     writer.close();
     DirectoryReader reader = DirectoryReader.open(dir);
-    StoredDocument doc2 = reader.document(reader.maxDoc() - 1);
-    StorableField[] fields = doc2.getFields("bin1");
+    Document2 doc2 = reader.document(reader.maxDoc() - 1);
+    List<IndexableField> fields = doc2.getFields("bin1");
     assertNotNull(fields);
-    assertEquals(1, fields.length);
-    StorableField b1 = fields[0];
+    assertEquals(1, fields.size());
+    IndexableField b1 = fields.get(0);
     assertTrue(b1.binaryValue() != null);
     BytesRef bytesRef = b1.binaryValue();
     assertEquals(bin.length, bytesRef.length);
@@ -397,8 +397,8 @@ public class TestDirectoryReader extends
     doc2 = reader.document(reader.maxDoc() - 1);
     fields = doc2.getFields("bin1");
     assertNotNull(fields);
-    assertEquals(1, fields.length);
-    b1 = fields[0];
+    assertEquals(1, fields.size());
+    b1 = fields.get(0);
     assertTrue(b1.binaryValue() != null);
     bytesRef = b1.binaryValue();
     assertEquals(bin.length, bytesRef.length);
@@ -577,16 +577,16 @@ public class TestDirectoryReader extends
     // check stored fields
     for (int i = 0; i < index1.maxDoc(); i++) {
       if (liveDocs1 == null || liveDocs1.get(i)) {
-        StoredDocument doc1 = index1.document(i);
-        StoredDocument doc2 = index2.document(i);
-        List<StorableField> field1 = doc1.getFields();
-        List<StorableField> field2 = doc2.getFields();
+        Document2 doc1 = index1.document(i);
+        Document2 doc2 = index2.document(i);
+        List<IndexableField> field1 = doc1.getFields();
+        List<IndexableField> field2 = doc2.getFields();
         assertEquals("Different numbers of fields for doc " + i + ".", field1.size(), field2.size());
-        Iterator<StorableField> itField1 = field1.iterator();
-        Iterator<StorableField> itField2 = field2.iterator();
+        Iterator<IndexableField> itField1 = field1.iterator();
+        Iterator<IndexableField> itField2 = field2.iterator();
         while (itField1.hasNext()) {
-          Field curField1 = (Field) itField1.next();
-          Field curField2 = (Field) itField2.next();
+          IndexableField curField1 = itField1.next();
+          IndexableField curField2 = itField2.next();
           assertEquals("Different fields names for doc " + i + ".", curField1.name(), curField2.name());
           assertEquals("Different field values for doc " + i + ".", curField1.stringValue(), curField2.stringValue());
         }          
@@ -1019,7 +1019,7 @@ public class TestDirectoryReader extends
     Set<String> fieldsToLoad = new HashSet<>();
     assertEquals(0, r.document(0, fieldsToLoad).getFields().size());
     fieldsToLoad.add("field1");
-    StoredDocument doc2 = r.document(0, fieldsToLoad);
+    Document2 doc2 = r.document(0, fieldsToLoad);
     assertEquals(1, doc2.getFields().size());
     assertEquals("foobar", doc2.get("field1"));
     r.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDirectoryReaderReopen.java Sat Nov  1 08:39:27 2014
@@ -29,6 +29,7 @@ import java.util.Set;
 
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.codecs.Codec;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
@@ -127,9 +128,9 @@ public class TestDirectoryReaderReopen e
           if (i>0) {
             int k = i-1;
             int n = j + k*M;
-            StoredDocument prevItereationDoc = reader.document(n);
+            Document2 prevItereationDoc = reader.document(n);
             assertNotNull(prevItereationDoc);
-            String id = prevItereationDoc.get("id");
+            String id = prevItereationDoc.getString("id");
             assertEquals(k+"_"+j, id);
           }
         }

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDoc.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDoc.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDoc.java Sat Nov  1 08:39:27 2014
@@ -34,6 +34,7 @@ import java.util.LinkedList;
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.document.Document;
+import org.apache.lucene.document.FieldTypes;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.search.DocIdSetIterator;
@@ -198,53 +199,52 @@ public class TestDoc extends LuceneTestC
    }
 
    private SegmentCommitInfo indexDoc(IndexWriter writer, String fileName)
-   throws Exception
-   {
-      Path path = workDir.resolve(fileName);
-      Document doc = new Document();
-      InputStreamReader is = new InputStreamReader(Files.newInputStream(path), StandardCharsets.UTF_8);
-      doc.add(new TextField("contents", is));
-      writer.addDocument(doc);
-      writer.commit();
-      is.close();
-      return writer.newestSegment();
+     throws Exception {
+     Path path = workDir.resolve(fileName);
+     Document doc = new Document();
+     InputStreamReader is = new InputStreamReader(Files.newInputStream(path), StandardCharsets.UTF_8);
+     doc.add(new TextField("contents", is));
+     writer.addDocument(doc);
+     writer.commit();
+     is.close();
+     return writer.newestSegment();
    }
 
-
    private SegmentCommitInfo merge(Directory dir, SegmentCommitInfo si1, SegmentCommitInfo si2, String merged, boolean useCompoundFile)
-   throws Exception {
-      IOContext context = newIOContext(random());
-      SegmentReader r1 = new SegmentReader(si1, context);
-      SegmentReader r2 = new SegmentReader(si2, context);
-
-      final Codec codec = Codec.getDefault();
-      TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(si1.info.dir);
-      final SegmentInfo si = new SegmentInfo(si1.info.dir, Version.LATEST, merged, -1, false, codec, null, StringHelper.randomId());
-
-      SegmentMerger merger = new SegmentMerger(Arrays.<LeafReader>asList(r1, r2),
-          si, InfoStream.getDefault(), trackingDir,
-          MergeState.CheckAbort.NONE, new FieldInfos.FieldNumbers(), context);
-
-      MergeState mergeState = merger.merge();
-      r1.close();
-      r2.close();;
-      si.setFiles(new HashSet<>(trackingDir.getCreatedFiles()));
+     throws Exception {
+     FieldTypes fieldTypes = FieldTypes.getFieldTypes(dir, null);
+     IOContext context = newIOContext(random());
+     SegmentReader r1 = new SegmentReader(fieldTypes, si1, context);
+     SegmentReader r2 = new SegmentReader(fieldTypes, si2, context);
+
+     final Codec codec = Codec.getDefault();
+     TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(si1.info.dir);
+     final SegmentInfo si = new SegmentInfo(si1.info.dir, Version.LATEST, merged, -1, false, codec, null, StringHelper.randomId());
+
+     SegmentMerger merger = new SegmentMerger(fieldTypes, Arrays.<LeafReader>asList(r1, r2),
+                                              si, InfoStream.getDefault(), trackingDir,
+                                              MergeState.CheckAbort.NONE, new FieldInfos.FieldNumbers(), context);
+
+     MergeState mergeState = merger.merge();
+     r1.close();
+     r2.close();;
+     si.setFiles(new HashSet<>(trackingDir.getCreatedFiles()));
       
-      if (useCompoundFile) {
-        Collection<String> filesToDelete = IndexWriter.createCompoundFile(InfoStream.getDefault(), dir, MergeState.CheckAbort.NONE, si, newIOContext(random()));
-        si.setUseCompoundFile(true);
-        for (final String fileToDelete : filesToDelete) {
-          si1.info.dir.deleteFile(fileToDelete);
-        }
-      }
+     if (useCompoundFile) {
+       Collection<String> filesToDelete = IndexWriter.createCompoundFile(InfoStream.getDefault(), dir, MergeState.CheckAbort.NONE, si, newIOContext(random()));
+       si.setUseCompoundFile(true);
+       for (final String fileToDelete : filesToDelete) {
+         si1.info.dir.deleteFile(fileToDelete);
+       }
+     }
 
-      return new SegmentCommitInfo(si, 0, -1L, -1L, -1L);
+     return new SegmentCommitInfo(si, 0, -1L, -1L, -1L);
    }
 
 
    private void printSegment(PrintWriter out, SegmentCommitInfo si)
    throws Exception {
-      SegmentReader reader = new SegmentReader(si, newIOContext(random()));
+      SegmentReader reader = new SegmentReader(null, si, newIOContext(random()));
 
       for (int i = 0; i < reader.numDocs(); i++)
         out.println(reader.document(i));

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocValuesIndexing.java Sat Nov  1 08:39:27 2014
@@ -24,9 +24,10 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.BinaryDocValuesField;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.document.Field;
 import org.apache.lucene.document.NumericDocValuesField;
 import org.apache.lucene.document.SortedDocValuesField;
 import org.apache.lucene.document.SortedSetDocValuesField;
@@ -210,10 +211,10 @@ public class TestDocValuesIndexing exten
     NumericDocValues dv = slow.getNumericDocValues("dv");
     for (int i = 0; i < 50; i++) {
       assertEquals(i, dv.get(i));
-      StoredDocument d = slow.document(i);
+      Document2 d = slow.document(i);
       // cannot use d.get("dv") due to another bug!
-      assertNull(d.getField("dv"));
-      assertEquals(Integer.toString(i), d.get("docId"));
+      assertNull(d.getString("dv"));
+      assertEquals(Integer.toString(i), d.getString("docId"));
     }
     slow.close();
     writer.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocumentWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocumentWriter.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocumentWriter.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestDocumentWriter.java Sat Nov  1 08:39:27 2014
@@ -18,6 +18,7 @@ package org.apache.lucene.index;
  */
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.lucene.analysis.*;
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
@@ -58,35 +59,36 @@ public class TestDocumentWriter extends 
 
   public void testAddDocument() throws Exception {
     SegmentCommitInfo info = DocHelper.writeDoc(random(), dir);
+    FieldTypes fieldTypes = FieldTypes.getFieldTypes(dir, null);
 
     //After adding the document, we should be able to read it back in
-    SegmentReader reader = new SegmentReader(info, newIOContext(random()));
+    SegmentReader reader = new SegmentReader(fieldTypes, info, newIOContext(random()));
     assertTrue(reader != null);
-    StoredDocument doc = reader.document(0);
+    Document2 doc = reader.document(0);
     assertTrue(doc != null);
 
     //System.out.println("Document: " + doc);
-    StorableField[] fields = doc.getFields("textField2");
-    assertTrue(fields != null && fields.length == 1);
-    assertTrue(fields[0].stringValue().equals(DocHelper.FIELD_2_TEXT));
-    assertTrue(fields[0].fieldType().storeTermVectors());
+    List<IndexableField> fields = doc.getFields("textField2");
+    assertTrue(fields != null && fields.size() == 1);
+    assertTrue(fields.get(0).stringValue().equals(DocHelper.FIELD_2_TEXT));
+    assertTrue(fields.get(0).fieldType().storeTermVectors());
 
     fields = doc.getFields("textField1");
-    assertTrue(fields != null && fields.length == 1);
-    assertTrue(fields[0].stringValue().equals(DocHelper.FIELD_1_TEXT));
-    assertFalse(fields[0].fieldType().storeTermVectors());
+    assertTrue(fields != null && fields.size() == 1);
+    assertTrue(fields.get(0).stringValue().equals(DocHelper.FIELD_1_TEXT));
+    assertFalse(fields.get(0).fieldType().storeTermVectors());
 
     fields = doc.getFields("keyField");
-    assertTrue(fields != null && fields.length == 1);
-    assertTrue(fields[0].stringValue().equals(DocHelper.KEYWORD_TEXT));
+    assertTrue(fields != null && fields.size() == 1);
+    assertTrue(fields.get(0).stringValue().equals(DocHelper.KEYWORD_TEXT));
 
     fields = doc.getFields(DocHelper.NO_NORMS_KEY);
-    assertTrue(fields != null && fields.length == 1);
-    assertTrue(fields[0].stringValue().equals(DocHelper.NO_NORMS_TEXT));
+    assertTrue(fields != null && fields.size() == 1);
+    assertTrue(fields.get(0).stringValue().equals(DocHelper.NO_NORMS_TEXT));
 
     fields = doc.getFields(DocHelper.TEXT_FIELD_3_KEY);
-    assertTrue(fields != null && fields.length == 1);
-    assertTrue(fields[0].stringValue().equals(DocHelper.FIELD_3_TEXT));
+    assertTrue(fields != null && fields.size() == 1);
+    assertTrue(fields.get(0).stringValue().equals(DocHelper.FIELD_3_TEXT));
 
     // test that the norms are not present in the segment if
     // omitNorms is true
@@ -121,7 +123,9 @@ public class TestDocumentWriter extends 
     writer.commit();
     SegmentCommitInfo info = writer.newestSegment();
     writer.close();
-    SegmentReader reader = new SegmentReader(info, newIOContext(random()));
+    
+    SegmentReader reader = new SegmentReader(FieldTypes.getFieldTypes(dir, analyzer),
+                                             info, newIOContext(random()));
 
     DocsAndPositionsEnum termPositions = MultiFields.getTermPositionsEnum(reader, MultiFields.getLiveDocs(reader),
                                                                           "repeated", new BytesRef("repeated"));
@@ -193,7 +197,8 @@ public class TestDocumentWriter extends 
     writer.commit();
     SegmentCommitInfo info = writer.newestSegment();
     writer.close();
-    SegmentReader reader = new SegmentReader(info, newIOContext(random()));
+    SegmentReader reader = new SegmentReader(FieldTypes.getFieldTypes(dir, analyzer),
+                                             info, newIOContext(random()));
 
     DocsAndPositionsEnum termPositions = MultiFields.getTermPositionsEnum(reader, reader.getLiveDocs(), "f1", new BytesRef("a"));
     assertTrue(termPositions.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);
@@ -235,7 +240,8 @@ public class TestDocumentWriter extends 
     writer.commit();
     SegmentCommitInfo info = writer.newestSegment();
     writer.close();
-    SegmentReader reader = new SegmentReader(info, newIOContext(random()));
+    SegmentReader reader = new SegmentReader(FieldTypes.getFieldTypes(dir, null),
+                                             info, newIOContext(random()));
 
     DocsAndPositionsEnum termPositions = reader.termPositionsEnum(new Term("preanalyzed", "term1"));
     assertTrue(termPositions.nextDoc() != DocIdSetIterator.NO_MORE_DOCS);

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldReuse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldReuse.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldReuse.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldReuse.java Sat Nov  1 08:39:27 2014
@@ -23,14 +23,15 @@ import java.util.Collections;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.CannedTokenStream;
-import org.apache.lucene.analysis.NumericTokenStream;
 import org.apache.lucene.analysis.NumericTokenStream.NumericTermAttribute;
+import org.apache.lucene.analysis.NumericTokenStream;
 import org.apache.lucene.analysis.Token;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.IntField;
 import org.apache.lucene.document.StringField;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.NumericUtils;
 
 /** test tokenstream reuse by DefaultIndexingChain */
@@ -119,6 +120,31 @@ public class TestFieldReuse extends Base
       lastSeen = reuse;
       return lastReturned = new CannedTokenStream(new Token("unimportant", 0, 10));
     }
+
+    @Override
+    public String stringValue() {
+      return null;
+    }
+
+    @Override
+    public Number numericValue() {
+      return null;
+    }
+
+    @Override
+    public Number numericDocValue() {
+      return null;
+    }
+
+    @Override
+    public BytesRef binaryDocValue() {
+      return null;
+    }
+
+    @Override
+    public BytesRef binaryValue() {
+      return null;
+    }
     
     @Override
     public float boost() {
@@ -131,30 +157,12 @@ public class TestFieldReuse extends Base
     IndexWriterConfig iwc = new IndexWriterConfig(null);
     IndexWriter iw = new IndexWriter(dir, iwc);
     final MyField field1 = new MyField();
-    iw.addDocument(new IndexDocument() {
-      @Override
-      public Iterable<? extends IndexableField> indexableFields() {
-        return Collections.singletonList(field1);
-      }
-      @Override
-      public Iterable<StorableField> storableFields() {
-        return Collections.emptyList();
-      }
-    });
+    iw.addDocument(Collections.singletonList(field1));
     TokenStream previous = field1.lastReturned;
     assertNotNull(previous);
     
     final MyField field2 = new MyField();
-    iw.addDocument(new IndexDocument() {
-      @Override
-      public Iterable<? extends IndexableField> indexableFields() {
-        return Collections.singletonList(field2);
-      }
-      @Override
-      public Iterable<StorableField> storableFields() {
-        return Collections.emptyList();
-      }
-    });
+    iw.addDocument(Collections.singletonList(field2));
     assertSame(previous, field2.lastSeen);
     iw.close();
     dir.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldsReader.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldsReader.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestFieldsReader.java Sat Nov  1 08:39:27 2014
@@ -24,9 +24,11 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.Document2;
+import org.apache.lucene.document.Document2StoredFieldVisitor;
 import org.apache.lucene.document.Document;
-import org.apache.lucene.document.DocumentStoredFieldVisitor;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.FieldTypes;
 import org.apache.lucene.index.FieldInfo.IndexOptions;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
 import org.apache.lucene.store.BaseDirectory;
@@ -60,32 +62,33 @@ public class TestFieldsReader extends Lu
   public void test() throws IOException {
     assertTrue(dir != null);
     IndexReader reader = DirectoryReader.open(dir);
-    StoredDocument doc = reader.document(0);
+    Document2 doc = reader.document(0);
     assertTrue(doc != null);
     assertTrue(doc.getField(DocHelper.TEXT_FIELD_1_KEY) != null);
 
-    Field field = (Field) doc.getField(DocHelper.TEXT_FIELD_2_KEY);
+    IndexableField field = doc.getField(DocHelper.TEXT_FIELD_2_KEY);
     assertTrue(field != null);
     assertTrue(field.fieldType().storeTermVectors());
 
     assertFalse(field.fieldType().omitNorms());
     assertEquals(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS, field.fieldType().indexOptions());
 
-    field = (Field) doc.getField(DocHelper.TEXT_FIELD_3_KEY);
+    field = doc.getField(DocHelper.TEXT_FIELD_3_KEY);
     assertTrue(field != null);
     assertFalse(field.fieldType().storeTermVectors());
     assertTrue(field.fieldType().omitNorms());
     assertEquals(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS, field.fieldType().indexOptions());
 
-    field = (Field) doc.getField(DocHelper.NO_TF_KEY);
+    field = doc.getField(DocHelper.NO_TF_KEY);
     assertTrue(field != null);
     assertFalse(field.fieldType().storeTermVectors());
     assertFalse(field.fieldType().omitNorms());
     assertTrue(field.fieldType().indexOptions() == IndexOptions.DOCS_ONLY);
 
-    DocumentStoredFieldVisitor visitor = new DocumentStoredFieldVisitor(DocHelper.TEXT_FIELD_3_KEY);
+    FieldTypes fieldTypes = FieldTypes.getFieldTypes(dir, null);
+    Document2StoredFieldVisitor visitor = new Document2StoredFieldVisitor(fieldTypes, DocHelper.TEXT_FIELD_3_KEY);
     reader.document(0, visitor);
-    final List<StorableField> fields = visitor.getDocument().getFields();
+    final List<IndexableField> fields = visitor.getDocument().getFields();
     assertEquals(1, fields.size());
     assertEquals(DocHelper.TEXT_FIELD_3_KEY, fields.get(0).name());
     reader.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java Sat Nov  1 08:39:27 2014
@@ -44,6 +44,7 @@ import org.apache.lucene.analysis.tokena
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.simpletext.SimpleTextCodec;
 import org.apache.lucene.document.BinaryDocValuesField;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
@@ -1287,8 +1288,8 @@ public class TestIndexWriter extends Luc
     w.close();
 
     IndexReader ir = DirectoryReader.open(dir);
-    StoredDocument doc2 = ir.document(0);
-    StorableField f3 = doc2.getField("binary");
+    Document2 doc2 = ir.document(0);
+    IndexableField f3 = doc2.getField("binary");
     b = f3.binaryValue().bytes;
     assertTrue(b != null);
     assertEquals(17, b.length, 17);
@@ -2111,17 +2112,7 @@ public class TestIndexWriter extends Luc
     }
     // add broken doc
     try {
-      iw.addDocument(new IndexDocument() {
-        @Override
-        public Iterable<IndexableField> indexableFields() {
-          return null;
-        }
-        
-        @Override
-        public Iterable<StorableField> storableFields() {
-          return Collections.emptyList();
-        }
-      });
+      iw.addDocument(null);
       fail();
     } catch (NullPointerException expected) {}
     // ensure good docs are still ok
@@ -2132,37 +2123,6 @@ public class TestIndexWriter extends Luc
     dir.close();
   }
   
-  public void testNullIterable2() throws IOException {
-    Directory dir = newDirectory();
-    RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
-    // add 3 good docs
-    for (int i = 0; i < 3; i++) {
-      Document doc = new Document();
-      doc.add(new StringField("id", Integer.toString(i), Field.Store.NO));
-      iw.addDocument(doc);
-    }
-    // add broken doc
-    try {
-      iw.addDocument(new IndexDocument() {
-        @Override
-        public Iterable<IndexableField> indexableFields() {
-          return Collections.emptyList();
-        }
-        
-        @Override
-        public Iterable<StorableField> storableFields() {
-          return null;
-        }
-      });
-    } catch (NullPointerException expected) {}
-    // ensure good docs are still ok
-    IndexReader ir = iw.getReader();
-    assertEquals(3, ir.numDocs());
-    ir.close();
-    iw.close();
-    dir.close();
-  }
-  
   public void testIterableFieldThrowsException() throws IOException {
     Directory dir = newDirectory();
     IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
@@ -2174,27 +2134,16 @@ public class TestIndexWriter extends Luc
       int numDocs = atLeast(4);
       for (int j = 0; j < numDocs; j++) {
         String id = Integer.toString(docId++);
-        final List<StorableField> storedFields = new ArrayList<>();
-        storedFields.add(new StoredField("id", id));
-        storedFields.add(new StoredField("foo",TestUtil.randomSimpleString(random())));
         final List<IndexableField> indexFields = new ArrayList<>();
         indexFields.add(new StringField("id", id, Field.Store.NO));
         indexFields.add(new StringField("foo", TestUtil.randomSimpleString(random()), Field.Store.NO));
+        indexFields.add(new StoredField("id", id));
+        indexFields.add(new StoredField("foo",TestUtil.randomSimpleString(random())));
         docId++;
         
         boolean success = false;
         try {
-          w.addDocument(new IndexDocument() {
-            @Override
-            public Iterable<IndexableField> indexableFields() {
-              return new RandomFailingIterable<IndexableField>(indexFields, random());
-            }
-
-            @Override
-            public Iterable<StorableField> storableFields() {
-              return new RandomFailingIterable<StorableField>(storedFields, random());
-            }        
-          });
+          w.addDocument(new RandomFailingIterable<IndexableField>(indexFields, random()));
           success = true;
         } catch (RuntimeException e) {
           assertEquals("boom", e.getMessage());
@@ -2232,7 +2181,7 @@ public class TestIndexWriter extends Luc
     int docId = 0;
     Set<String> liveIds = new HashSet<>();
     for (int i = 0; i < iters; i++) {
-      List<Document> docs = new ArrayList<>();
+      List<Iterable<IndexableField>> docs = new ArrayList<>();
       FieldType ft = new FieldType(TextField.TYPE_NOT_STORED);
       FieldType idFt = new FieldType(TextField.TYPE_STORED);
       
@@ -2245,15 +2194,15 @@ public class TestIndexWriter extends Luc
       }
       boolean success = false;
       try {
-        w.addDocuments(new RandomFailingIterable<IndexDocument>(docs, random()));
+        w.addDocuments(new RandomFailingIterable<Iterable<IndexableField>>(docs, random()));
         success = true;
       } catch (RuntimeException e) {
         assertEquals("boom", e.getMessage());
       } finally {
         if (success) {
           docCount += docs.size();
-          for (Document indexDocument : docs) {
-            liveIds.add(indexDocument.get("id"));  
+          for (Iterable<IndexableField> indexDocument : docs) {
+            liveIds.add(((Document) indexDocument).get("id"));  
           }
         }
       }

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java Sat Nov  1 08:39:27 2014
@@ -1759,15 +1759,13 @@ public class TestIndexWriterExceptions e
     doc.add(new StringField("foo", "bar", Field.Store.NO));
     iw.addDocument(doc); // add an 'ok' document
     try {
-      doc = new Document();
       // try to boost with norms omitted
-      IndexDocument docList = new IndexDocument() {
+      Iterable<IndexableField> doc2 = new Iterable<IndexableField>() {
         
         List<IndexableField> list = new ArrayList<>();
-        List<StorableField> storedList = new ArrayList<>();
         
         @Override
-        public Iterable<IndexableField> indexableFields() {
+        public Iterator<IndexableField> iterator() {
           if (list.size() == 0) {
             list.add(new IndexableField() {
               @Override
@@ -1786,21 +1784,40 @@ public class TestIndexWriterExceptions e
               }
 
               @Override
+              public String stringValue() {
+                return null;
+              }
+
+              @Override
+              public Number numericDocValue() {
+                return null;
+              }
+
+              @Override
+              public Number numericValue() {
+                return null;
+              }
+
+              @Override
+              public BytesRef binaryDocValue() {
+                return null;
+              }
+
+              @Override
+              public BytesRef binaryValue() {
+                return null;
+              }
+
+              @Override
               public TokenStream tokenStream(Analyzer analyzer, TokenStream previous) throws IOException {
                 return null;
               }
             });
           }
-          return list;
-        }
-
-        @Override
-        public Iterable<StorableField> storableFields() {
-          return storedList;
+          return list.iterator();
         }
-        
       };
-      iw.addDocument(docList);
+      iw.addDocument(doc2);
       fail("didn't get any exception, boost silently discarded");
     } catch (UnsupportedOperationException expected) {
       // expected

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterMerging.java Sat Nov  1 08:39:27 2014
@@ -20,6 +20,7 @@ import java.util.Random;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.document.Document2;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
@@ -85,7 +86,7 @@ public class TestIndexWriterMerging exte
     int max = reader.maxDoc();
     for (int i = 0; i < max; i++)
     {
-      StoredDocument temp = reader.document(i);
+      Document2 temp = reader.document(i);
       //System.out.println("doc "+i+"="+temp.getField("count").stringValue());
       //compare the index doc number to the value that it should be
       if (!temp.getField("count").stringValue().equals((i + startAt) + ""))

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java Sat Nov  1 08:39:27 2014
@@ -267,10 +267,10 @@ public class TestIndexWriterReader exten
     assertEquals(100, index2df);
 
     // verify the docs are from different indexes
-    StoredDocument doc5 = r1.document(5);
-    assertEquals("index1", doc5.get("indexname"));
-    StoredDocument doc150 = r1.document(150);
-    assertEquals("index2", doc150.get("indexname"));
+    Document2 doc5 = r1.document(5);
+    assertEquals("index1", doc5.getString("indexname"));
+    Document2 doc150 = r1.document(150);
+    assertEquals("index2", doc150.getString("indexname"));
     r1.close();
     writer.close();
     dir1.close();

Modified: lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterThreadsToSegments.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterThreadsToSegments.java?rev=1635898&r1=1635897&r2=1635898&view=diff
==============================================================================
--- lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterThreadsToSegments.java (original)
+++ lucene/dev/branches/lucene6005/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterThreadsToSegments.java Sat Nov  1 08:39:27 2014
@@ -30,6 +30,7 @@ import org.apache.lucene.analysis.MockAn
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
+import org.apache.lucene.document.FieldTypes;
 import org.apache.lucene.document.TextField;
 import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.Directory;
@@ -337,7 +338,8 @@ public class TestIndexWriterThreadsToSeg
             SegmentInfo si = TestUtil.getDefaultCodec().segmentInfoFormat().read(dir, segName, id, IOContext.DEFAULT);
             si.setCodec(codec);
             SegmentCommitInfo sci = new SegmentCommitInfo(si, 0, -1, -1, -1);
-            SegmentReader sr = new SegmentReader(sci, IOContext.DEFAULT);
+            SegmentReader sr = new SegmentReader(w.getFieldTypes(),
+                                                 sci, IOContext.DEFAULT);
             try {
               thread0Count += sr.docFreq(new Term("field", "threadID0"));
               thread1Count += sr.docFreq(new Term("field", "threadID1"));