You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by mh...@apache.org on 2013/09/24 20:33:03 UTC

[27/50] [abbrv] git commit: IT NOW BUILDS!~!!!

IT NOW BUILDS!~!!!


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/733dc181
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/733dc181
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/733dc181

Branch: refs/heads/branch_4x
Commit: 733dc181cbbb770d6455c684ce0aabeaef2b1d8f
Parents: 25ec42a
Author: Paul Irwin <pa...@gmail.com>
Authored: Tue Aug 6 16:28:33 2013 -0400
Committer: Paul Irwin <pa...@gmail.com>
Committed: Tue Aug 6 16:28:33 2013 -0400

----------------------------------------------------------------------
 .../Analysis/Tokenattributes/ITermAttribute.cs  | 104 -----
 .../Analysis/Tokenattributes/TermAttribute.cs   | 268 -------------
 src/core/Codecs/Compressing/CompressionMode.cs  |  10 +-
 src/core/Codecs/StoredFieldsWriter.cs           |   4 +-
 src/core/Index/AtomicReader.cs                  |  10 +
 src/core/Index/MultiFields.cs                   |  10 +-
 src/core/Index/MultiTermsEnum.cs                |   2 +-
 src/core/Index/NormsConsumer.cs                 |   2 +-
 src/core/Index/NumericDocValuesWriter.cs        |   2 +-
 src/core/Index/ReadersAndLiveDocs.cs            |   4 +-
 src/core/Index/SegmentInfoPerCommit.cs          |   2 +-
 src/core/Index/SortedDocValuesWriter.cs         |   2 +-
 src/core/Index/SortedSetDocValuesWriter.cs      |   6 +-
 src/core/Index/StandardDirectoryReader.cs       |  15 +-
 src/core/Index/StoredFieldsProcessor.cs         |   2 +-
 src/core/Index/TermContext.cs                   |   2 +-
 src/core/Index/TermVectorsConsumerPerField.cs   |  28 +-
 src/core/Lucene.Net.csproj                      |   3 +-
 src/core/Search/FieldComparator.cs              |  86 ++--
 src/core/Search/MultiPhraseQuery.cs             |   9 +-
 src/core/Search/MultiTermQueryWrapperFilter.cs  |   2 +-
 src/core/Search/NRTManager.cs                   |  10 +-
 src/core/Search/NumericRangeQuery.cs            |   2 +-
 src/core/Search/Payloads/PayloadNearQuery.cs    |  24 +-
 src/core/Search/Payloads/PayloadSpanUtil.cs     |   5 +-
 src/core/Search/Payloads/PayloadTermQuery.cs    | 392 ++++++++++---------
 src/core/Search/PhraseQuery.cs                  |   4 +-
 src/core/Search/QueryWrapperFilter.cs           |   4 +-
 src/core/Search/ReqExclScorer.cs                |   2 +-
 src/core/Search/ScoreCachingWrappingScorer.cs   |   2 +-
 src/core/Search/ScoringRewrite.cs               |   4 +-
 src/core/Search/Similarities/SimilarityBase.cs  |  10 +-
 src/core/Search/Similarities/TFIDFSimilarity.cs |   6 +-
 src/core/Search/Spans/NearSpansOrdered.cs       |   4 +-
 src/core/Search/Spans/NearSpansUnordered.cs     |   2 +-
 .../Search/Spans/SpanNearPayloadCheckQuery.cs   |  11 +-
 src/core/Search/Spans/SpanNearQuery.cs          |   2 +-
 src/core/Search/Spans/SpanPositionCheckQuery.cs |   2 +-
 src/core/Search/Spans/SpanScorer.cs             |   2 +-
 src/core/Search/Spans/SpanTermQuery.cs          |  16 +-
 src/core/Search/Spans/SpanWeight.cs             |   2 +-
 src/core/Search/Spans/TermSpans.cs              |   4 +-
 src/core/Search/TermQuery.cs                    |   6 +-
 src/core/Search/TermRangeFilter.cs              |   4 +-
 src/core/Search/TermRangeQuery.cs               |  24 +-
 src/core/Search/TopDocs.cs                      |   2 +-
 src/core/Search/TopFieldCollector.cs            |  10 +-
 src/core/Store/NIOFSDirectory.cs                |   2 +-
 src/core/Store/SimpleFSDirectory.cs             |   2 +-
 src/core/Support/Deflater.cs                    |  36 ++
 src/core/Support/Inflater.cs                    |  36 ++
 src/core/Support/StringBuilderExtensions.cs     |  28 ++
 src/core/Util/Fst/ReverseBytesReader.cs         |   4 +-
 53 files changed, 534 insertions(+), 703 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Analysis/Tokenattributes/ITermAttribute.cs
----------------------------------------------------------------------
diff --git a/src/core/Analysis/Tokenattributes/ITermAttribute.cs b/src/core/Analysis/Tokenattributes/ITermAttribute.cs
deleted file mode 100644
index 8f9b030..0000000
--- a/src/core/Analysis/Tokenattributes/ITermAttribute.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-/* 
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using Lucene.Net.Util;
-
-namespace Lucene.Net.Analysis.Tokenattributes
-{
-	
-	/// <summary> The term text of a Token.</summary>
-	public interface ITermAttribute:IAttribute
-	{
-	    /// <summary>Returns the Token's term text.
-	    /// 
-	    /// This method has a performance penalty
-	    /// because the text is stored internally in a char[].  If
-	    /// possible, use <see cref="TermBuffer()" /> and <see cref="TermLength()" />
-	    /// directly instead.  If you really need a
-	    /// String, use this method, which is nothing more than
-	    /// a convenience call to <b>new String(token.termBuffer(), 0, token.termLength())</b>
-	    /// </summary>
-	    string Term { get; }
-
-	    /// <summary>Copies the contents of buffer, starting at offset for
-		/// length characters, into the termBuffer array.
-		/// </summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		/// <param name="offset">the index in the buffer of the first character to copy
-		/// </param>
-		/// <param name="length">the number of characters to copy
-		/// </param>
-		void  SetTermBuffer(char[] buffer, int offset, int length);
-		
-		/// <summary>Copies the contents of buffer into the termBuffer array.</summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		void  SetTermBuffer(System.String buffer);
-		
-		/// <summary>Copies the contents of buffer, starting at offset and continuing
-		/// for length characters, into the termBuffer array.
-		/// </summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		/// <param name="offset">the index in the buffer of the first character to copy
-		/// </param>
-		/// <param name="length">the number of characters to copy
-		/// </param>
-		void  SetTermBuffer(System.String buffer, int offset, int length);
-		
-		/// <summary>Returns the internal termBuffer character array which
-		/// you can then directly alter.  If the array is too
-		/// small for your token, use <see cref="ResizeTermBuffer(int)" />
-		/// to increase it.  After
-		/// altering the buffer be sure to call <see cref="SetTermLength" />
-		/// to record the number of valid
-		/// characters that were placed into the termBuffer. 
-		/// </summary>
-		char[] TermBuffer();
-		
-		/// <summary>Grows the termBuffer to at least size newSize, preserving the
-		/// existing content. Note: If the next operation is to change
-		/// the contents of the term buffer use
-		/// <see cref="SetTermBuffer(char[], int, int)" />,
-		/// <see cref="SetTermBuffer(String)" />, or
-		/// <see cref="SetTermBuffer(String, int, int)" />
-		/// to optimally combine the resize with the setting of the termBuffer.
-		/// </summary>
-		/// <param name="newSize">minimum size of the new termBuffer
-		/// </param>
-		/// <returns> newly created termBuffer with length >= newSize
-		/// </returns>
-		char[] ResizeTermBuffer(int newSize);
-		
-		/// <summary>Return number of valid characters (length of the term)
-		/// in the termBuffer array. 
-		/// </summary>
-		int TermLength();
-		
-		/// <summary>Set number of valid characters (length of the term) in
-		/// the termBuffer array. Use this to truncate the termBuffer
-		/// or to synchronize with external manipulation of the termBuffer.
-		/// Note: to grow the size of the array,
-		/// use <see cref="ResizeTermBuffer(int)" /> first.
-		/// </summary>
-		/// <param name="length">the truncated length
-		/// </param>
-		void  SetTermLength(int length);
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Analysis/Tokenattributes/TermAttribute.cs
----------------------------------------------------------------------
diff --git a/src/core/Analysis/Tokenattributes/TermAttribute.cs b/src/core/Analysis/Tokenattributes/TermAttribute.cs
deleted file mode 100644
index f95402c..0000000
--- a/src/core/Analysis/Tokenattributes/TermAttribute.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-/* 
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-using System;
-using Lucene.Net.Support;
-using ArrayUtil = Lucene.Net.Util.ArrayUtil;
-using Attribute = Lucene.Net.Util.Attribute;
-
-namespace Lucene.Net.Analysis.Tokenattributes
-{
-	
-	/// <summary> The term text of a Token.</summary>
-	[Serializable]
-	public class TermAttribute:Attribute, ITermAttribute, System.ICloneable
-	{
-		private static int MIN_BUFFER_SIZE = 10;
-		
-		private char[] termBuffer;
-		private int termLength;
-
-	    /// <summary>Returns the Token's term text.
-	    /// 
-	    /// This method has a performance penalty
-	    /// because the text is stored internally in a char[].  If
-	    /// possible, use <see cref="TermBuffer()" /> and 
-	    /// <see cref="TermLength()" /> directly instead.  If you 
-	    /// really need a String, use this method, which is nothing more than
-	    /// a convenience call to <b>new String(token.termBuffer(), 0, token.termLength())</b>
-	    /// </summary>
-	    public virtual string Term
-	    {
-	        get
-	        {
-	            InitTermBuffer();
-	            return new System.String(termBuffer, 0, termLength);
-	        }
-	    }
-
-	    /// <summary>Copies the contents of buffer, starting at offset for
-		/// length characters, into the termBuffer array.
-		/// </summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		/// <param name="offset">the index in the buffer of the first character to copy
-		/// </param>
-		/// <param name="length">the number of characters to copy
-		/// </param>
-		public virtual void  SetTermBuffer(char[] buffer, int offset, int length)
-		{
-			GrowTermBuffer(length);
-			Array.Copy(buffer, offset, termBuffer, 0, length);
-			termLength = length;
-		}
-		
-		/// <summary>Copies the contents of buffer into the termBuffer array.</summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		public virtual void  SetTermBuffer(System.String buffer)
-		{
-			int length = buffer.Length;
-			GrowTermBuffer(length);
-			TextSupport.GetCharsFromString(buffer, 0, length, termBuffer, 0);
-			termLength = length;
-		}
-		
-		/// <summary>Copies the contents of buffer, starting at offset and continuing
-		/// for length characters, into the termBuffer array.
-		/// </summary>
-		/// <param name="buffer">the buffer to copy
-		/// </param>
-		/// <param name="offset">the index in the buffer of the first character to copy
-		/// </param>
-		/// <param name="length">the number of characters to copy
-		/// </param>
-		public virtual void  SetTermBuffer(System.String buffer, int offset, int length)
-		{
-			System.Diagnostics.Debug.Assert(offset <= buffer.Length);
-			System.Diagnostics.Debug.Assert(offset + length <= buffer.Length);
-			GrowTermBuffer(length);
-			TextSupport.GetCharsFromString(buffer, offset, offset + length, termBuffer, 0);
-			termLength = length;
-		}
-		
-		/// <summary>Returns the internal termBuffer character array which
-		/// you can then directly alter.  If the array is too
-		/// small for your token, use <see cref="ResizeTermBuffer(int)" />
-		/// to increase it.  After
-		/// altering the buffer be sure to call <see cref="SetTermLength" />
-		/// to record the number of valid
-		/// characters that were placed into the termBuffer. 
-		/// </summary>
-		public virtual char[] TermBuffer()
-		{
-			InitTermBuffer();
-			return termBuffer;
-		}
-		
-		/// <summary>Grows the termBuffer to at least size newSize, preserving the
-		/// existing content. Note: If the next operation is to change
-		/// the contents of the term buffer use
-		/// <see cref="SetTermBuffer(char[], int, int)" />,
-		/// <see cref="SetTermBuffer(String)" />, or
-		/// <see cref="SetTermBuffer(String, int, int)" />
-		/// to optimally combine the resize with the setting of the termBuffer.
-		/// </summary>
-		/// <param name="newSize">minimum size of the new termBuffer
-		/// </param>
-		/// <returns> newly created termBuffer with length >= newSize
-		/// </returns>
-		public virtual char[] ResizeTermBuffer(int newSize)
-		{
-			if (termBuffer == null)
-			{
-				// The buffer is always at least MIN_BUFFER_SIZE
-				termBuffer = new char[ArrayUtil.GetNextSize(newSize < MIN_BUFFER_SIZE?MIN_BUFFER_SIZE:newSize)];
-			}
-			else
-			{
-				if (termBuffer.Length < newSize)
-				{
-					// Not big enough; create a new array with slight
-					// over allocation and preserve content
-					char[] newCharBuffer = new char[ArrayUtil.GetNextSize(newSize)];
-					Array.Copy(termBuffer, 0, newCharBuffer, 0, termBuffer.Length);
-					termBuffer = newCharBuffer;
-				}
-			}
-			return termBuffer;
-		}
-		
-		
-		/// <summary>Allocates a buffer char[] of at least newSize, without preserving the existing content.
-		/// its always used in places that set the content 
-		/// </summary>
-		/// <param name="newSize">minimum size of the buffer
-		/// </param>
-		private void  GrowTermBuffer(int newSize)
-		{
-			if (termBuffer == null)
-			{
-				// The buffer is always at least MIN_BUFFER_SIZE
-				termBuffer = new char[ArrayUtil.GetNextSize(newSize < MIN_BUFFER_SIZE?MIN_BUFFER_SIZE:newSize)];
-			}
-			else
-			{
-				if (termBuffer.Length < newSize)
-				{
-					// Not big enough; create a new array with slight
-					// over allocation:
-					termBuffer = new char[ArrayUtil.GetNextSize(newSize)];
-				}
-			}
-		}
-		
-		private void  InitTermBuffer()
-		{
-			if (termBuffer == null)
-			{
-				termBuffer = new char[ArrayUtil.GetNextSize(MIN_BUFFER_SIZE)];
-				termLength = 0;
-			}
-		}
-		
-		/// <summary>Return number of valid characters (length of the term)
-		/// in the termBuffer array. 
-		/// </summary>
-		public virtual int TermLength()
-		{
-			return termLength;
-		}
-		
-		/// <summary>Set number of valid characters (length of the term) in
-		/// the termBuffer array. Use this to truncate the termBuffer
-		/// or to synchronize with external manipulation of the termBuffer.
-		/// Note: to grow the size of the array,
-		/// use <see cref="ResizeTermBuffer(int)" /> first.
-		/// </summary>
-		/// <param name="length">the truncated length
-		/// </param>
-		public virtual void  SetTermLength(int length)
-		{
-			InitTermBuffer();
-			if (length > termBuffer.Length)
-				throw new System.ArgumentException("length " + length + " exceeds the size of the termBuffer (" + termBuffer.Length + ")");
-			termLength = length;
-		}
-		
-		public override int GetHashCode()
-		{
-			InitTermBuffer();
-			int code = termLength;
-			code = code * 31 + ArrayUtil.HashCode(termBuffer, 0, termLength);
-			return code;
-		}
-		
-		public override void  Clear()
-		{
-			termLength = 0;
-		}
-		
-		public override System.Object Clone()
-		{
-			TermAttribute t = (TermAttribute) base.Clone();
-			// Do a deep clone
-			if (termBuffer != null)
-			{
-				t.termBuffer = new char[termBuffer.Length];
-				termBuffer.CopyTo(t.termBuffer, 0);
-			}
-			return t;
-		}
-		
-		public  override bool Equals(System.Object other)
-		{
-			if (other == this)
-			{
-				return true;
-			}
-			
-			if (other is ITermAttribute)
-			{
-				InitTermBuffer();
-				TermAttribute o = ((TermAttribute) other);
-				o.InitTermBuffer();
-				
-				if (termLength != o.termLength)
-					return false;
-				for (int i = 0; i < termLength; i++)
-				{
-					if (termBuffer[i] != o.termBuffer[i])
-					{
-						return false;
-					}
-				}
-				return true;
-			}
-			
-			return false;
-		}
-		
-		public override System.String ToString()
-		{
-			InitTermBuffer();
-			return "term=" + new System.String(termBuffer, 0, termLength);
-		}
-		
-		public override void  CopyTo(Attribute target)
-		{
-			InitTermBuffer();
-			ITermAttribute t = (ITermAttribute) target;
-			t.SetTermBuffer(termBuffer, 0, termLength);
-		}
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Codecs/Compressing/CompressionMode.cs
----------------------------------------------------------------------
diff --git a/src/core/Codecs/Compressing/CompressionMode.cs b/src/core/Codecs/Compressing/CompressionMode.cs
index 92f5316..4a91d5c 100644
--- a/src/core/Codecs/Compressing/CompressionMode.cs
+++ b/src/core/Codecs/Compressing/CompressionMode.cs
@@ -193,7 +193,7 @@ namespace Lucene.Net.Codecs.Compressing
 
             public DeflateDecompressor()
             {
-                decompressor = new Inflater();
+                decompressor = SharpZipLib.CreateInflater();
                 compressed = new byte[0];
             }
 
@@ -225,7 +225,7 @@ namespace Lucene.Net.Codecs.Compressing
                     try
                     {
                         int remaining = bytes.bytes.Length - bytes.length;
-                        count = decompressor.Inflate(bytes.bytes, bytes.length, remaining);
+                        count = decompressor.Inflate((byte[])(Array)bytes.bytes, bytes.length, remaining);
                     }
                     catch (FormatException e)
                     {
@@ -274,10 +274,10 @@ namespace Lucene.Net.Codecs.Compressing
             public override void Compress(sbyte[] bytes, int off, int len, DataOutput output)
             {
                 compressor.Reset();
-                compressor.SetInput(bytes, off, len);
+                compressor.SetInput((byte[])(Array)bytes, off, len);
                 compressor.Finish();
 
-                if (compressor.NeedsInput)
+                if (compressor.IsNeedingInput)
                 {
                     // no output
                     output.WriteVInt(0);
@@ -287,7 +287,7 @@ namespace Lucene.Net.Codecs.Compressing
                 int totalCount = 0;
                 for (; ; )
                 {
-                    int count = compressor.Deflate(compressed, totalCount, compressed.Length - totalCount);
+                    int count = compressor.Deflate((byte[])(Array)compressed, totalCount, compressed.Length - totalCount);
                     totalCount += count;
                     if (compressor.IsFinished)
                     {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Codecs/StoredFieldsWriter.cs
----------------------------------------------------------------------
diff --git a/src/core/Codecs/StoredFieldsWriter.cs b/src/core/Codecs/StoredFieldsWriter.cs
index 536d386..86e58ed 100644
--- a/src/core/Codecs/StoredFieldsWriter.cs
+++ b/src/core/Codecs/StoredFieldsWriter.cs
@@ -62,7 +62,7 @@ namespace Lucene.Net.Codecs
             int storedCount = 0;
             foreach (IIndexableField field in doc)
             {
-                if (field.FieldType.Stored)
+                if (field.FieldTypeValue.Stored)
                 {
                     storedCount++;
                 }
@@ -72,7 +72,7 @@ namespace Lucene.Net.Codecs
 
             foreach (IIndexableField field in doc)
             {
-                if (field.FieldType.Stored)
+                if (field.FieldTypeValue.Stored)
                 {
                     WriteField(fieldInfos.FieldInfo(field.Name), field);
                 }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/AtomicReader.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/AtomicReader.cs b/src/core/Index/AtomicReader.cs
index 5981765..b0dc1b6 100644
--- a/src/core/Index/AtomicReader.cs
+++ b/src/core/Index/AtomicReader.cs
@@ -27,6 +27,16 @@ namespace Lucene.Net.Index
             }
         }
 
+        // .NET Port: This is needed since Context can't change return type on override
+        public AtomicReaderContext AtomicContext
+        {
+            get
+            {
+                EnsureOpen();
+                return readerContext;
+            }
+        }
+
         [Obsolete]
         public bool HasNorms(string field)
         {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/MultiFields.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/MultiFields.cs b/src/core/Index/MultiFields.cs
index 8f2a961..3ed64aa 100644
--- a/src/core/Index/MultiFields.cs
+++ b/src/core/Index/MultiFields.cs
@@ -23,13 +23,13 @@ namespace Lucene.Net.Index
                     return null;
                 case 1:
                     // already an atomic reader / reader with one leave
-                    return leaves[0].Reader.Fields;
+                    return leaves[0].AtomicReader.Fields;
                 default:
                     IList<Fields> fields = new List<Fields>();
                     IList<ReaderSlice> slices = new List<ReaderSlice>();
                     foreach (AtomicReaderContext ctx in leaves)
                     {
-                        AtomicReader r = ctx.Reader;
+                        AtomicReader r = ctx.AtomicReader;
                         Fields f = r.Fields;
                         if (f != null)
                         {
@@ -61,7 +61,7 @@ namespace Lucene.Net.Index
                 //assert size > 0 : "A reader with deletions must have at least one leave";
                 if (size == 1)
                 {
-                    return leaves[0].Reader.LiveDocs;
+                    return leaves[0].AtomicReader.LiveDocs;
                 }
                 IBits[] liveDocs = new IBits[size];
                 int[] starts = new int[size + 1];
@@ -69,7 +69,7 @@ namespace Lucene.Net.Index
                 {
                     // record all liveDocs, even if they are null
                     AtomicReaderContext ctx = leaves[i];
-                    liveDocs[i] = ctx.Reader.LiveDocs;
+                    liveDocs[i] = ctx.AtomicReader.LiveDocs;
                     starts[i] = ctx.docBase;
                 }
                 starts[size] = reader.MaxDoc;
@@ -199,7 +199,7 @@ namespace Lucene.Net.Index
             FieldInfos.Builder builder = new FieldInfos.Builder();
             foreach (AtomicReaderContext ctx in reader.Leaves)
             {
-                builder.Add(ctx.Reader.FieldInfos);
+                builder.Add(ctx.AtomicReader.FieldInfos);
             }
             return builder.Finish();
         }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/MultiTermsEnum.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/MultiTermsEnum.cs b/src/core/Index/MultiTermsEnum.cs
index 164b33b..2a9dd35 100644
--- a/src/core/Index/MultiTermsEnum.cs
+++ b/src/core/Index/MultiTermsEnum.cs
@@ -119,7 +119,7 @@ namespace Lucene.Net.Index
                 }
             }
 
-            if (queue.Size() == 0)
+            if (queue.Size == 0)
             {
                 return TermsEnum.EMPTY;
             }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/NormsConsumer.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/NormsConsumer.cs b/src/core/Index/NormsConsumer.cs
index b166975..afd7fd5 100644
--- a/src/core/Index/NormsConsumer.cs
+++ b/src/core/Index/NormsConsumer.cs
@@ -21,7 +21,7 @@ namespace Lucene.Net.Index
             {
                 if (state.fieldInfos.HasNorms)
                 {
-                    NormsFormat normsFormat = state.segmentInfo.Codec.NormsFormat();
+                    NormsFormat normsFormat = state.segmentInfo.Codec.NormsFormat;
                     //assert normsFormat != null;
                     normsConsumer = normsFormat.NormsConsumer(state);
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/NumericDocValuesWriter.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/NumericDocValuesWriter.cs b/src/core/Index/NumericDocValuesWriter.cs
index 35542cd..9de0e54 100644
--- a/src/core/Index/NumericDocValuesWriter.cs
+++ b/src/core/Index/NumericDocValuesWriter.cs
@@ -70,7 +70,7 @@ namespace Lucene.Net.Index
         {
             // .NET Port: using yield return instead of custom iterator type. Much less code.
 
-            AppendingLongBuffer.Iterator iter = pending.GetIterator();
+            AbstractAppendingLongBuffer.Iterator iter = pending.GetIterator();
             int size = (int)pending.Size;
             int upto = 0;
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/ReadersAndLiveDocs.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/ReadersAndLiveDocs.cs b/src/core/Index/ReadersAndLiveDocs.cs
index 0fb3aa2..28ae366 100644
--- a/src/core/Index/ReadersAndLiveDocs.cs
+++ b/src/core/Index/ReadersAndLiveDocs.cs
@@ -302,7 +302,7 @@ namespace Lucene.Net.Index
                     // SegmentReader sharing the current liveDocs
                     // instance; must now make a private clone so we can
                     // change it:
-                    LiveDocsFormat liveDocsFormat = info.info.Codec.LiveDocsFormat();
+                    LiveDocsFormat liveDocsFormat = info.info.Codec.LiveDocsFormat;
                     if (liveDocs == null)
                     {
                         //System.out.println("create BV seg=" + info);
@@ -388,7 +388,7 @@ namespace Lucene.Net.Index
                 bool success = false;
                 try
                 {
-                    info.info.Codec.LiveDocsFormat().WriteLiveDocs((IMutableBits)liveDocs, trackingDir, info, pendingDeleteCount, IOContext.DEFAULT);
+                    info.info.Codec.LiveDocsFormat.WriteLiveDocs((IMutableBits)liveDocs, trackingDir, info, pendingDeleteCount, IOContext.DEFAULT);
                     success = true;
                 }
                 finally

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/SegmentInfoPerCommit.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/SegmentInfoPerCommit.cs b/src/core/Index/SegmentInfoPerCommit.cs
index 9434936..603446b 100644
--- a/src/core/Index/SegmentInfoPerCommit.cs
+++ b/src/core/Index/SegmentInfoPerCommit.cs
@@ -72,7 +72,7 @@ namespace Lucene.Net.Index
                 ICollection<String> files = new HashSet<String>(info.Files);
 
                 // Must separately add any live docs files:
-                info.Codec.LiveDocsFormat().Files(this, files);
+                info.Codec.LiveDocsFormat.Files(this, files);
 
                 return files;
             }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/SortedDocValuesWriter.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/SortedDocValuesWriter.cs b/src/core/Index/SortedDocValuesWriter.cs
index f25c457..cc6a23c 100644
--- a/src/core/Index/SortedDocValuesWriter.cs
+++ b/src/core/Index/SortedDocValuesWriter.cs
@@ -135,7 +135,7 @@ namespace Lucene.Net.Index
         {
             // .NET Port: using yield return instead of custom iterator type. Much less code.
 
-            AppendingLongBuffer.Iterator iter = pending.GetIterator();
+            AbstractAppendingLongBuffer.Iterator iter = pending.GetIterator();
             int docUpto = 0;
 
             while (docUpto < maxDoc)

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/SortedSetDocValuesWriter.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/SortedSetDocValuesWriter.cs b/src/core/Index/SortedSetDocValuesWriter.cs
index 23998e4..9cddcef 100644
--- a/src/core/Index/SortedSetDocValuesWriter.cs
+++ b/src/core/Index/SortedSetDocValuesWriter.cs
@@ -178,8 +178,8 @@ namespace Lucene.Net.Index
         {
             // .NET Port: using yield return instead of custom iterator type. Much less code.
 
-            AppendingLongBuffer.Iterator iter = pending.GetIterator();
-            AppendingLongBuffer.Iterator counts = pendingCounts.GetIterator();
+            AbstractAppendingLongBuffer.Iterator iter = pending.GetIterator();
+            AbstractAppendingLongBuffer.Iterator counts = pendingCounts.GetIterator();
             long numOrds = pending.Size;
             long ordUpto = 0L;
 
@@ -212,7 +212,7 @@ namespace Lucene.Net.Index
         {
             // .NET Port: using yield return instead of custom iterator type. Much less code.
 
-            AppendingLongBuffer.Iterator iter = pendingCounts.GetIterator();
+            AbstractAppendingLongBuffer.Iterator iter = pendingCounts.GetIterator();
             int docUpto = 0;
 
             while (docUpto < maxDoc)

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/StandardDirectoryReader.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/StandardDirectoryReader.cs b/src/core/Index/StandardDirectoryReader.cs
index 4ec5e91..55d222e 100644
--- a/src/core/Index/StandardDirectoryReader.cs
+++ b/src/core/Index/StandardDirectoryReader.cs
@@ -28,9 +28,12 @@ namespace Lucene.Net.Index
 
         private sealed class AnonymousOpenFindSegmentsFile : SegmentInfos.FindSegmentsFile
         {
-            public AnonymousOpenFindSegmentsFile(Directory dir)
+            private readonly int termInfosIndexDivisor;
+
+            public AnonymousOpenFindSegmentsFile(Directory dir, int termInfosIndexDivisor)
                 : base(dir)
             {
+                this.termInfosIndexDivisor = termInfosIndexDivisor;
             }
 
             protected override object DoBody(string segmentFileName)
@@ -63,7 +66,7 @@ namespace Lucene.Net.Index
 
         internal static DirectoryReader Open(Directory directory, IndexCommit commit, int termInfosIndexDivisor)
         {
-            return (DirectoryReader)new AnonymousOpenFindSegmentsFile(directory).Run(commit);
+            return (DirectoryReader)new AnonymousOpenFindSegmentsFile(directory, termInfosIndexDivisor).Run(commit);
         }
 
         internal static DirectoryReader Open(IndexWriter writer, SegmentInfos infos, bool applyAllDeletes)
@@ -94,7 +97,7 @@ namespace Lucene.Net.Index
                     try
                     {
                         SegmentReader reader = rld.GetReadOnlyClone(IOContext.READ);
-                        if (reader.NumDocs > 0 || writer.KeepFullyDeletedSegments)
+                        if (reader.NumDocs > 0 || writer.GetKeepFullyDeletedSegments())
                         {
                             // Steal the ref:
                             readers.Add(reader);
@@ -103,7 +106,7 @@ namespace Lucene.Net.Index
                         else
                         {
                             reader.Dispose();
-                            segmentInfos.Remove(infosUpto);
+                            segmentInfos.RemoveAt(infosUpto);
                         }
                     }
                     finally
@@ -155,7 +158,7 @@ namespace Lucene.Net.Index
             for (int i = infos.Count - 1; i >= 0; i--)
             {
                 // find SegmentReader for this segment
-                int oldReaderIndex = segmentReaders[infos.Info(i).info.Name];
+                int oldReaderIndex = segmentReaders[infos.Info(i).info.name];
                 if (oldReaderIndex == null)
                 {
                     // this is a new segment, no old SegmentReader can be reused
@@ -395,7 +398,7 @@ namespace Lucene.Net.Index
             get
             {
                 EnsureOpen();
-                if (writer == null || writer.IsClosed())
+                if (writer == null || writer.IsClosed)
                 {
                     // Fully read the segments file: this ensures that it's
                     // completely written so that if

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/StoredFieldsProcessor.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/StoredFieldsProcessor.cs b/src/core/Index/StoredFieldsProcessor.cs
index 0f119ac..351a24e 100644
--- a/src/core/Index/StoredFieldsProcessor.cs
+++ b/src/core/Index/StoredFieldsProcessor.cs
@@ -132,7 +132,7 @@ namespace Lucene.Net.Index
 
         public override void AddField(int docID, IIndexableField field, FieldInfo fieldInfo)
         {
-            if (field.FieldType.Stored)
+            if (field.FieldTypeValue.Stored)
             {
                 if (numStoredFields == storedFields.Length)
                 {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/TermContext.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/TermContext.cs b/src/core/Index/TermContext.cs
index 1d1410a..932d295 100644
--- a/src/core/Index/TermContext.cs
+++ b/src/core/Index/TermContext.cs
@@ -47,7 +47,7 @@ namespace Lucene.Net.Index
             foreach (AtomicReaderContext ctx in context.Leaves)
             {
                 //if (DEBUG) System.out.println("  r=" + leaves[i].reader);
-                Fields fields = ctx.Reader.Fields;
+                Fields fields = ctx.AtomicReader.Fields;
                 if (fields != null)
                 {
                     Terms terms = fields.Terms(field);

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Index/TermVectorsConsumerPerField.cs
----------------------------------------------------------------------
diff --git a/src/core/Index/TermVectorsConsumerPerField.cs b/src/core/Index/TermVectorsConsumerPerField.cs
index adda8ec..1c0a1fd 100644
--- a/src/core/Index/TermVectorsConsumerPerField.cs
+++ b/src/core/Index/TermVectorsConsumerPerField.cs
@@ -70,37 +70,37 @@ namespace Lucene.Net.Index
                     }
                     else
                     {
-                        if (field.FieldType.StoreTermVectorOffsets)
+                        if (field.FieldTypeValue.StoreTermVectorOffsets)
                         {
-                            throw new ArgumentException("cannot index term vector offsets when term vectors are not indexed (field=\"" + field.name());
+                            throw new ArgumentException("cannot index term vector offsets when term vectors are not indexed (field=\"" + field.Name);
                         }
-                        if (field.FieldType.StoreTermVectorPositions)
+                        if (field.FieldTypeValue.StoreTermVectorPositions)
                         {
-                            throw new ArgumentException("cannot index term vector positions when term vectors are not indexed (field=\"" + field.name());
+                            throw new ArgumentException("cannot index term vector positions when term vectors are not indexed (field=\"" + field.Name);
                         }
-                        if (field.FieldType.StoreTermVectorPayloads)
+                        if (field.FieldTypeValue.StoreTermVectorPayloads)
                         {
-                            throw new ArgumentException("cannot index term vector payloads when term vectors are not indexed (field=\"" + field.name());
+                            throw new ArgumentException("cannot index term vector payloads when term vectors are not indexed (field=\"" + field.Name);
                         }
                     }
                 }
                 else
                 {
-                    if (field.FieldType.StoreTermVectors)
+                    if (field.FieldTypeValue.StoreTermVectors)
                     {
-                        throw new ArgumentException("cannot index term vectors when field is not indexed (field=\"" + field.name());
+                        throw new ArgumentException("cannot index term vectors when field is not indexed (field=\"" + field.Name);
                     }
-                    if (field.FieldType.StoreTermVectorOffsets)
+                    if (field.FieldTypeValue.StoreTermVectorOffsets)
                     {
-                        throw new ArgumentException("cannot index term vector offsets when field is not indexed (field=\"" + field.name());
+                        throw new ArgumentException("cannot index term vector offsets when field is not indexed (field=\"" + field.Name);
                     }
-                    if (field.FieldType.StoreTermVectorPositions)
+                    if (field.FieldTypeValue.StoreTermVectorPositions)
                     {
-                        throw new ArgumentException("cannot index term vector positions when field is not indexed (field=\"" + field.name());
+                        throw new ArgumentException("cannot index term vector positions when field is not indexed (field=\"" + field.Name);
                     }
-                    if (field.FieldType.StoreTermVectorPayloads)
+                    if (field.FieldTypeValue.StoreTermVectorPayloads)
                     {
-                        throw new ArgumentException("cannot index term vector payloads when field is not indexed (field=\"" + field.name());
+                        throw new ArgumentException("cannot index term vector payloads when field is not indexed (field=\"" + field.Name);
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Lucene.Net.csproj
----------------------------------------------------------------------
diff --git a/src/core/Lucene.Net.csproj b/src/core/Lucene.Net.csproj
index 4b17cab..a6f3de8 100644
--- a/src/core/Lucene.Net.csproj
+++ b/src/core/Lucene.Net.csproj
@@ -163,9 +163,7 @@
     <Compile Include="Analysis\Tokenattributes\PayloadAttribute.cs" />
     <Compile Include="Analysis\Tokenattributes\IPositionIncrementAttribute.cs" />
     <Compile Include="Analysis\Tokenattributes\PositionIncrementAttribute.cs" />
-    <Compile Include="Analysis\Tokenattributes\ITermAttribute.cs" />
     <Compile Include="Analysis\Tokenattributes\PositionLengthAttribute.cs" />
-    <Compile Include="Analysis\Tokenattributes\TermAttribute.cs" />
     <Compile Include="Analysis\Tokenattributes\ITypeAttribute.cs" />
     <Compile Include="Analysis\Tokenattributes\TypeAttribute.cs" />
     <Compile Include="Analysis\TokenFilter.cs">
@@ -920,6 +918,7 @@
     <Compile Include="Support\IChecksum.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Support\StringBuilderExtensions.cs" />
     <Compile Include="Support\StringTokenizer.cs" />
     <Compile Include="Support\TaskSchedulerCompletionService.cs" />
     <Compile Include="Support\ThreadFactory.cs" />

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/FieldComparator.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/FieldComparator.cs b/src/core/Search/FieldComparator.cs
index 7caead2..6f5083d 100644
--- a/src/core/Search/FieldComparator.cs
+++ b/src/core/Search/FieldComparator.cs
@@ -79,17 +79,6 @@ namespace Lucene.Net.Search
     {
         // .NET Port: this class doesn't line-by-line match up with java due to use of non-generic casting.
         // see FieldComparator below.
-
-        /// <summary> Set a new Reader. All doc correspond to the current Reader.
-        /// 
-        /// </summary>
-        /// <param name="reader">current reader
-        /// </param>
-        /// <param name="docBase">docBase of this reader 
-        /// </param>
-        /// <throws>  IOException </throws>
-        /// <throws>  IOException </throws>
-        public abstract FieldComparator<T> SetNextReader(AtomicReaderContext context);
         
         /// <summary> Return the actual value in the slot.
         /// 
@@ -129,7 +118,21 @@ namespace Lucene.Net.Search
         }
 
         public abstract int CompareDocToValue(int doc, T value);
+        
+        public abstract override int Compare(int slot1, int slot2);
+
+        public abstract override void SetBottom(int slot);
+
+        public abstract override int CompareBottom(int doc);
 
+        public abstract override void Copy(int slot, int doc);
+
+        public abstract override FieldComparator SetNextReader(AtomicReaderContext context);
+
+        public override int CompareDocToObjectValue(int doc, object value)
+        {
+            return CompareDocToValue(doc, (T)value);
+        }
     }
 
     // .NET Port: Using a non-generic class here so that we avoid having to use the 
@@ -190,6 +193,17 @@ namespace Lucene.Net.Search
         /// <param name="doc">docID relative to current reader
         /// </param>
         public abstract void Copy(int slot, int doc);
+        
+        /// <summary> Set a new Reader. All doc correspond to the current Reader.
+        /// 
+        /// </summary>
+        /// <param name="reader">current reader
+        /// </param>
+        /// <param name="docBase">docBase of this reader 
+        /// </param>
+        /// <throws>  IOException </throws>
+        /// <throws>  IOException </throws>
+        public abstract FieldComparator SetNextReader(AtomicReaderContext context);
 
         /// <summary>Sets the Scorer to use in case a document's score is
         /// needed.
@@ -206,6 +220,32 @@ namespace Lucene.Net.Search
 
         public abstract object Value(int slot);
 
+        public int CompareValues(object first, object second)
+        {
+            if (first == null)
+            {
+                if (second == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return -1;
+                }
+            }
+            else if (second == null)
+            {
+                return 1;
+            }
+            else
+            {
+                return ((IComparable<object>)first).CompareTo(second);
+            }
+        }
+
+        // .NET Port: a non-generic version of this method
+        public abstract int CompareDocToObjectValue(int doc, object value);
+
         public abstract class NumericComparator<T> : FieldComparator<T>
             where T : struct
         {
@@ -219,7 +259,7 @@ namespace Lucene.Net.Search
                 this.missingValue = missingValue;
             }
 
-            public override FieldComparator<T> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 if (missingValue != null)
                 {
@@ -285,7 +325,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<sbyte> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -365,7 +405,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<double> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -446,7 +486,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<float> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -526,7 +566,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<short> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -638,7 +678,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<int> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -757,7 +797,7 @@ namespace Lucene.Net.Search
                 values[slot] = v2;
             }
 
-            public override FieldComparator<long> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // NOTE: must do this before calling super otherwise
                 // we compute the docsWithField Bits twice!
@@ -836,7 +876,7 @@ namespace Lucene.Net.Search
                 //assert !Float.isNaN(scores[slot]);
             }
 
-            public override FieldComparator<float> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 return this;
             }
@@ -911,7 +951,7 @@ namespace Lucene.Net.Search
                 docIDs[slot] = docBase + doc;
             }
 
-            public override FieldComparator<int> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 // TODO: can we "map" our docIDs to the current
                 // reader? saves having to then subtract on every
@@ -1033,7 +1073,7 @@ namespace Lucene.Net.Search
                     this.parent = parent;
                 }
 
-                public override FieldComparator<BytesRef> SetNextReader(AtomicReaderContext context)
+                public override FieldComparator SetNextReader(AtomicReaderContext context)
                 {
                     return parent.SetNextReader(context);
                 }
@@ -1131,7 +1171,7 @@ namespace Lucene.Net.Search
                 }
             }
 
-            public override FieldComparator<BytesRef> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 int docBase = context.docBase;
                 termsIndex = FieldCache.DEFAULT.GetTermsIndex(context.AtomicReader, field);
@@ -1252,7 +1292,7 @@ namespace Lucene.Net.Search
                 docTerms.Get(doc, values[slot]);
             }
 
-            public override FieldComparator<BytesRef> SetNextReader(AtomicReaderContext context)
+            public override FieldComparator SetNextReader(AtomicReaderContext context)
             {
                 docTerms = FieldCache.DEFAULT.GetTerms(context.AtomicReader, field);
                 return this;

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/MultiPhraseQuery.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/MultiPhraseQuery.cs b/src/core/Search/MultiPhraseQuery.cs
index c525784..57cfe09 100644
--- a/src/core/Search/MultiPhraseQuery.cs
+++ b/src/core/Search/MultiPhraseQuery.cs
@@ -142,6 +142,7 @@ namespace Lucene.Net.Search
             {
                 this.parent = parent;
                 this.similarity = searcher.Similarity;
+                IndexReaderContext context = searcher.TopReaderContext;
 
                 // compute idf
                 var allTermStats = new List<TermStatistics>();
@@ -182,7 +183,7 @@ namespace Lucene.Net.Search
                                           IBits acceptDocs)
             {
                 //assert !termArrays.isEmpty();
-                var reader = context.Reader;
+                var reader = context.AtomicReader;
                 var liveDocs = acceptDocs;
 
                 var postingsFreqs = new PhraseQuery.PostingsAndFreq[parent.termArrays.Count];
@@ -284,7 +285,7 @@ namespace Lucene.Net.Search
 
             public override Explanation Explain(AtomicReaderContext context, int doc)
             {
-                var scorer = Scorer(context, true, false, context.Reader.LiveDocs);
+                var scorer = Scorer(context, true, false, context.AtomicReader.LiveDocs);
                 if (scorer != null)
                 {
                     var newDoc = scorer.Advance(doc);
@@ -316,7 +317,7 @@ namespace Lucene.Net.Search
             if (!termArrays.Any())
             {
                 var bq = new BooleanQuery();
-                bq.Boost = Boost);
+                bq.Boost = Boost;
                 return bq;
             }
             else if (termArrays.Count == 1)
@@ -325,7 +326,7 @@ namespace Lucene.Net.Search
                 var boq = new BooleanQuery(true);
                 foreach (var t in terms)
                 {
-                    boq.Add(new TermQuery(t), BooleanClause.Occur.SHOULD);
+                    boq.Add(new TermQuery(t), Occur.SHOULD);
                 }
                 boq.Boost = Boost;
                 return boq;

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/MultiTermQueryWrapperFilter.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/MultiTermQueryWrapperFilter.cs b/src/core/Search/MultiTermQueryWrapperFilter.cs
index d657e58..38b933b 100644
--- a/src/core/Search/MultiTermQueryWrapperFilter.cs
+++ b/src/core/Search/MultiTermQueryWrapperFilter.cs
@@ -79,7 +79,7 @@ namespace Lucene.Net.Search
 
         public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs)
         {
-            var reader = context.Reader;
+            var reader = context.AtomicReader;
             var fields = reader.Fields;
             if (fields == null)
             {

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/NRTManager.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/NRTManager.cs b/src/core/Search/NRTManager.cs
index 7eaa5bb..b6f4b27 100644
--- a/src/core/Search/NRTManager.cs
+++ b/src/core/Search/NRTManager.cs
@@ -29,7 +29,7 @@ namespace Lucene.Net.Search
                 searcherFactory = new SearcherFactory();
             }
             this.searcherFactory = searcherFactory;
-            Current = SearcherManager.GetSearcher(searcherFactory, DirectoryReader.Open(writer.IndexWriter, applyAllDeletes));
+            current = SearcherManager.GetSearcher(searcherFactory, DirectoryReader.Open(writer.IndexWriter, applyAllDeletes));
         }
 
         protected override void DecRef(IndexSearcher reference)
@@ -67,25 +67,25 @@ namespace Lucene.Net.Search
                 this.writer = writer;
             }
 
-            public virtual long UpdateDocument(Term t, IIndexableField d, Analyzer a)
+            public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d, Analyzer a)
             {
                 writer.UpdateDocument(t, d, a);
                 return Interlocked.Read(ref indexingGen);
             }
 
-            public virtual long UpdateDocument(Term t, IIndexableField d)
+            public virtual long UpdateDocument(Term t, IEnumerable<IIndexableField> d)
             {
                 writer.UpdateDocument(t, d);
                 return Interlocked.Read(ref indexingGen);
             }
 
-            public virtual long UpdateDocuments(Term t, IEnumerable<IIndexableField> docs, Analyzer a)
+            public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs, Analyzer a)
             {
                 writer.UpdateDocuments(t, docs, a);
                 return Interlocked.Read(ref indexingGen);
             }
 
-            public virtual long UpdateDocuments(Term t, IEnumerable<IIndexableField> docs)
+            public virtual long UpdateDocuments(Term t, IEnumerable<IEnumerable<IIndexableField>> docs)
             {
                 writer.UpdateDocuments(t, docs);
                 return Interlocked.Read(ref indexingGen);

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/NumericRangeQuery.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/NumericRangeQuery.cs b/src/core/Search/NumericRangeQuery.cs
index 1b4e90c..c1a2acb 100644
--- a/src/core/Search/NumericRangeQuery.cs
+++ b/src/core/Search/NumericRangeQuery.cs
@@ -177,7 +177,7 @@ namespace Lucene.Net.Search
             {
                 return TermsEnum.EMPTY;
             }
-            return new NumericRangeTermsEnum(terms.Iterator(null));
+            return new NumericRangeTermsEnum(this, terms.Iterator(null));
         }
 
 	    /// <summary>Returns the field name for this query </summary>

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Payloads/PayloadNearQuery.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Payloads/PayloadNearQuery.cs b/src/core/Search/Payloads/PayloadNearQuery.cs
index ddef9cb..6159fad 100644
--- a/src/core/Search/Payloads/PayloadNearQuery.cs
+++ b/src/core/Search/Payloads/PayloadNearQuery.cs
@@ -112,15 +112,18 @@ namespace Lucene.Net.Search.Payloads
 
         public class PayloadNearSpanScorer : SpanScorer
         {
+            private readonly PayloadNearQuery parent;
+
             private readonly BytesRef scratch = new BytesRef();
-            protected float payloadScore;
+            protected internal float payloadScore;
             internal int payloadsSeen;
             private SpansBase spans;
 
-            protected PayloadNearSpanScorer(SpansBase spans, Weight weight,
+            public PayloadNearSpanScorer(PayloadNearQuery parent, SpansBase spans, Weight weight,
                                             Similarity similarity, Similarity.SloppySimScorer docScorer)
                 : base(spans, weight, docScorer)
             {
+                this.parent = parent;
                 this.spans = spans;
             }
 
@@ -159,7 +162,7 @@ namespace Lucene.Net.Search.Payloads
                     scratch.bytes = thePayload;
                     scratch.offset = 0;
                     scratch.length = thePayload.Length;
-                    payloadScore = function.CurrentScore(doc, fieldName, start, end,
+                    payloadScore = parent.function.CurrentScore(doc, parent.fieldName, start, end,
                                                          payloadsSeen, payloadScore, docScorer.ComputePayloadFactor(doc, spans.Start, spans.End, scratch));
                     ++payloadsSeen;
                 }
@@ -179,7 +182,7 @@ namespace Lucene.Net.Search.Payloads
                 {
                     int matchLength = spans.End - spans.Start;
                     freq += docScorer.ComputeSlopFactor(matchLength);
-                    var spansArr = new Spans[1];
+                    var spansArr = new SpansBase[1];
                     spansArr[0] = spans;
                     GetPayloads(spansArr);
                     more = spans.Next();
@@ -190,21 +193,24 @@ namespace Lucene.Net.Search.Payloads
             public float Score()
             {
                 return base.Score()
-                       * function.DocScore(doc, fieldName, payloadsSeen, payloadScore);
+                       * parent.function.DocScore(doc, parent.fieldName, payloadsSeen, payloadScore);
             }
         }
 
         public class PayloadNearSpanWeight : SpanWeight
         {
-            public PayloadNearSpanWeight(SpanQuery query, IndexSearcher searcher)
+            private readonly PayloadNearQuery parent;
+
+            public PayloadNearSpanWeight(PayloadNearQuery query, IndexSearcher searcher)
                 : base(query, searcher)
             {
+                this.parent = query;
             }
-
+            
             public override Scorer Scorer(AtomicReaderContext context, bool scoreDocsInOrder,
                                           bool topScorer, IBits acceptDocs)
             {
-                return new PayloadNearSpanScorer(query.GetSpans(context, acceptDocs, termContexts), this,
+                return new PayloadNearSpanScorer(parent, query.GetSpans(context, acceptDocs, termContexts), this,
                                                  similarity, similarity.GetSloppySimScorer(stats, context));
             }
 
@@ -226,7 +232,7 @@ namespace Lucene.Net.Search.Payloads
                         expl.Value = scoreExplanation.Value;
                         String field = ((SpanQuery)Query).Field;
                         // now the payloads part
-                        Explanation payloadExpl = function.Explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
+                        Explanation payloadExpl = parent.function.Explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
                         // combined
                         var result = new ComplexExplanation();
                         result.AddDetail(expl);

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Payloads/PayloadSpanUtil.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Payloads/PayloadSpanUtil.cs b/src/core/Search/Payloads/PayloadSpanUtil.cs
index 11f5249..3834e60 100644
--- a/src/core/Search/Payloads/PayloadSpanUtil.cs
+++ b/src/core/Search/Payloads/PayloadSpanUtil.cs
@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.Linq;
 using Lucene.Net.Index;
 using Lucene.Net.Search;
 using Lucene.Net.Search.Spans;
@@ -115,7 +116,7 @@ public class PayloadSpanUtil
                     IList<Query> disjuncts = disjunctLists[i];
                     if (disjuncts != null)
                     {
-                        clauses[position++] = new SpanOrQuery(disjuncts.ToArray(new SpanQuery[disjuncts.Count]));
+                        clauses[position++] = new SpanOrQuery(disjuncts.OfType<SpanQuery>().ToArray());
                     }
                     else
                     {
@@ -145,7 +146,7 @@ public class PayloadSpanUtil
         }
         foreach (AtomicReaderContext atomicReaderContext in context.Leaves)
         {
-            SpansBase spans = query.GetSpans(atomicReaderContext, atomicReaderContext.Reader.LiveDocs, termContexts);
+            SpansBase spans = query.GetSpans(atomicReaderContext, atomicReaderContext.AtomicReader.LiveDocs, termContexts);
             while (spans.Next())
             {
                 if (spans.IsPayloadAvailable())

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Payloads/PayloadTermQuery.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Payloads/PayloadTermQuery.cs b/src/core/Search/Payloads/PayloadTermQuery.cs
index 3426bac..6b9db10 100644
--- a/src/core/Search/Payloads/PayloadTermQuery.cs
+++ b/src/core/Search/Payloads/PayloadTermQuery.cs
@@ -6,185 +6,227 @@ using Lucene.Net.Search.Similarities;
 using Lucene.Net.Search.Spans;
 using Lucene.Net.Util;
 
-public class PayloadTermQuery : SpanTermQuery {
-  protected PayloadFunction function;
-  private bool includeSpanScore;
-
-    public PayloadTermQuery(Term term, PayloadFunction function) : this(term, function, true) {}
-
-    public PayloadTermQuery(Term term, PayloadFunction function,
-      bool includeSpanScore) : base(term) {
-    this.function = function;
-    this.includeSpanScore = includeSpanScore;
-  }
-
-  public override Weight CreateWeight(IndexSearcher searcher)  {
-    return new PayloadTermWeight(this, searcher);
-  }
-
-  protected class PayloadTermWeight : SpanWeight {
-
-    public PayloadTermWeight(PayloadTermQuery query, IndexSearcher searcher) : base(query, searcher) {
-    }
-
-    public override Scorer Scorer(AtomicReaderContext context, bool scoreDocsInOrder,
-        bool topScorer, IBits acceptDocs)  {
-      return new PayloadTermSpanScorer((TermSpans) query.GetSpans(context, acceptDocs, termContexts),
-          this, similarity.GetSloppySimScorer(stats, context));
-    }
-
-    protected class PayloadTermSpanScorer : SpanScorer {
-      protected BytesRef payload;
-      protected float payloadScore;
-      protected int payloadsSeen;
-      private readonly TermSpans termSpans;
-
-      public PayloadTermSpanScorer(TermSpans spans, Weight weight, Similarity.SloppySimScorer docScorer) :base(spans, weight, docScorer) {
-        termSpans = spans;
-      }
+namespace Lucene.Net.Search.Payloads
+{
+    public class PayloadTermQuery : SpanTermQuery
+    {
+        protected PayloadFunction function;
+        private bool includeSpanScore;
+
+        public PayloadTermQuery(Term term, PayloadFunction function) : this(term, function, true) { }
+
+        public PayloadTermQuery(Term term, PayloadFunction function,
+          bool includeSpanScore)
+            : base(term)
+        {
+            this.function = function;
+            this.includeSpanScore = includeSpanScore;
+        }
 
-      protected override bool SetFreqCurrentDoc()  {
-        if (!more) {
-          return false;
+        public override Weight CreateWeight(IndexSearcher searcher)
+        {
+            return new PayloadTermWeight(this, searcher);
         }
-        doc = spans.Doc;
-        freq = 0.0f;
-        numMatches = 0;
-        payloadScore = 0;
-        payloadsSeen = 0;
-        while (more && doc == spans.Doc) {
-          int matchLength = spans.End - spans.Start;
-
-          freq += docScorer.ComputeSlopFactor(matchLength);
-          numMatches++;
-          ProcessPayload(similarity);
-
-          more = spans.Next();// this moves positions to the next match in this
-                              // document
+
+        protected class PayloadTermWeight : SpanWeight
+        {
+            protected readonly PayloadTermQuery parent;
+            
+            public PayloadTermWeight(PayloadTermQuery query, IndexSearcher searcher)
+                : base(query, searcher)
+            {
+                this.parent = query;
+            }
+
+            public override Scorer Scorer(AtomicReaderContext context, bool scoreDocsInOrder,
+                bool topScorer, IBits acceptDocs)
+            {
+                return new PayloadTermSpanScorer(this, (TermSpans)query.GetSpans(context, acceptDocs, termContexts),
+                    this, similarity.GetSloppySimScorer(stats, context));
+            }
+
+            protected class PayloadTermSpanScorer : SpanScorer
+            {
+                private readonly PayloadTermWeight parent;
+
+                protected BytesRef payload;
+                protected internal float payloadScore;
+                protected internal int payloadsSeen;
+                private readonly TermSpans termSpans;
+
+                public PayloadTermSpanScorer(PayloadTermWeight parent, TermSpans spans, Weight weight, Similarity.SloppySimScorer docScorer)
+                    : base(spans, weight, docScorer)
+                {
+                    this.parent = parent;
+                    termSpans = spans;
+                }
+
+                protected override bool SetFreqCurrentDoc()
+                {
+                    if (!more)
+                    {
+                        return false;
+                    }
+                    doc = spans.Doc;
+                    freq = 0.0f;
+                    numMatches = 0;
+                    payloadScore = 0;
+                    payloadsSeen = 0;
+                    while (more && doc == spans.Doc)
+                    {
+                        int matchLength = spans.End - spans.Start;
+
+                        freq += docScorer.ComputeSlopFactor(matchLength);
+                        numMatches++;
+                        ProcessPayload(parent.similarity);
+
+                        more = spans.Next();// this moves positions to the next match in this
+                        // document
+                    }
+                    return more || (freq != 0);
+                }
+
+                protected void ProcessPayload(Similarity similarity)
+                {
+                    if (termSpans.IsPayloadAvailable())
+                    {
+                        DocsAndPositionsEnum postings = termSpans.Postings;
+                        payload = postings.Payload;
+                        if (payload != null)
+                        {
+                            payloadScore = parent.parent.function.CurrentScore(doc, parent.parent.term.Field,
+                                                                 spans.Start, spans.End, payloadsSeen, payloadScore,
+                                                                 docScorer.ComputePayloadFactor(doc, spans.Start, spans.End, payload));
+                        }
+                        else
+                        {
+                            payloadScore = parent.parent.function.CurrentScore(doc, parent.parent.term.Field,
+                                                                 spans.Start, spans.End, payloadsSeen, payloadScore, 1F);
+                        }
+                        payloadsSeen++;
+
+                    }
+                    else
+                    {
+                        // zero out the payload?
+                    }
+                }
+
+                /**
+                 * 
+                 * @return {@link #getSpanScore()} * {@link #getPayloadScore()}
+                 * @throws IOException if there is a low-level I/O error
+                 */
+                public override float Score()
+                {
+
+                    return parent.parent.includeSpanScore ? GetSpanScore() * GetPayloadScore()
+                        : GetPayloadScore();
+                }
+
+                /**
+                 * Returns the SpanScorer score only.
+                 * <p/>
+                 * Should not be overridden without good cause!
+                 * 
+                 * @return the score for just the Span part w/o the payload
+                 * @throws IOException if there is a low-level I/O error
+                 * 
+                 * @see #score()
+                 */
+                protected float GetSpanScore()
+                {
+                    return base.Score();
+                }
+
+                /**
+                 * The score for the payload
+                 * 
+                 * @return The score, as calculated by
+                 *         {@link PayloadFunction#docScore(int, String, int, float)}
+                 */
+                protected internal float GetPayloadScore()
+                {
+                    return parent.parent.function.DocScore(doc, parent.parent.term.Field, payloadsSeen, payloadScore);
+                }
+            }
+
+            public override Explanation Explain(AtomicReaderContext context, int doc)
+            {
+                PayloadTermSpanScorer scorer = (PayloadTermSpanScorer)Scorer(context, true, false, context.AtomicReader.LiveDocs);
+                if (scorer != null)
+                {
+                    int newDoc = scorer.Advance(doc);
+                    if (newDoc == doc)
+                    {
+                        float freq = scorer.SloppyFreq();
+                        Similarity.SloppySimScorer docScorer = similarity.GetSloppySimScorer(stats, context);
+                        Explanation expl = new Explanation();
+                        expl.Description = "weight(" + Query + " in " + doc + ") [" + similarity.GetType().Name + "], result of:";
+                        Explanation scoreExplanation = docScorer.Explain(doc, new Explanation(freq, "phraseFreq=" + freq));
+                        expl.AddDetail(scoreExplanation);
+                        expl.Value = scoreExplanation.Value;
+                        // now the payloads part
+                        // QUESTION: Is there a way to avoid this skipTo call? We need to know
+                        // whether to load the payload or not
+                        // GSI: I suppose we could toString the payload, but I don't think that
+                        // would be a good idea
+                        string field = ((SpanQuery)Query).Field;
+                        Explanation payloadExpl = parent.function.Explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
+                        payloadExpl.Value = scorer.GetPayloadScore();
+                        // combined
+                        ComplexExplanation result = new ComplexExplanation();
+                        if (parent.includeSpanScore)
+                        {
+                            result.AddDetail(expl);
+                            result.AddDetail(payloadExpl);
+                            result.Value = expl.Value * payloadExpl.Value;
+                            result.Description = "btq, product of:";
+                        }
+                        else
+                        {
+                            result.AddDetail(payloadExpl);
+                            result.Value = payloadExpl.Value;
+                            result.Description = "btq(includeSpanScore=false), result of:";
+                        }
+                        result.Match = true; // LUCENE-1303
+                        return result;
+                    }
+                }
+
+                return new ComplexExplanation(false, 0.0f, "no matching term");
+            }
         }
-        return more || (freq != 0);
-      }
-
-      protected void ProcessPayload(Similarity similarity)  {
-        if (termSpans.IsPayloadAvailable()) {
-          DocsAndPositionsEnum postings = termSpans.Postings;
-          payload = postings.Payload;
-          if (payload != null) {
-            payloadScore = function.CurrentScore(doc, term.field(),
-                                                 spans.Start, spans.End, payloadsSeen, payloadScore,
-                                                 docScorer.ComputePayloadFactor(doc, spans.Start, spans.End, payload));
-          } else {
-            payloadScore = function.CurrentScore(doc, term.field(),
-                                                 spans.Start, spans.End, payloadsSeen, payloadScore, 1F);
-          }
-          payloadsSeen++;
-
-        } else {
-          // zero out the payload?
+
+        public override int GetHashCode()
+        {
+            int prime = 31;
+            int result = base.GetHashCode();
+            result = prime * result + ((function == null) ? 0 : function.GetHashCode());
+            result = prime * result + (includeSpanScore ? 1231 : 1237);
+            return result;
         }
-      }
-
-      /**
-       * 
-       * @return {@link #getSpanScore()} * {@link #getPayloadScore()}
-       * @throws IOException if there is a low-level I/O error
-       */
-      public override float Score()  {
-
-        return includeSpanScore ? GetSpanScore() * GetPayloadScore()
-            : GetPayloadScore();
-      }
-
-      /**
-       * Returns the SpanScorer score only.
-       * <p/>
-       * Should not be overridden without good cause!
-       * 
-       * @return the score for just the Span part w/o the payload
-       * @throws IOException if there is a low-level I/O error
-       * 
-       * @see #score()
-       */
-      protected float GetSpanScore()  {
-        return base.Score();
-      }
-
-      /**
-       * The score for the payload
-       * 
-       * @return The score, as calculated by
-       *         {@link PayloadFunction#docScore(int, String, int, float)}
-       */
-      protected float GetPayloadScore() {
-        return function.DocScore(doc, term.field(), payloadsSeen, payloadScore);
-      }
-    }
-    
-    public override Explanation Explain(AtomicReaderContext context, int doc)  {
-      PayloadTermSpanScorer scorer = (PayloadTermSpanScorer) Scorer(context, true, false, context.Reader.LiveDocs);
-      if (scorer != null) {
-        int newDoc = scorer.Advance(doc);
-        if (newDoc == doc) {
-          float freq = scorer.SloppyFreq();
-          Similarity.SloppySimScorer docScorer = Similarity.SloppySimScorer(stats, context);
-          Explanation expl = new Explanation();
-          expl.Description = "weight("+Query+" in "+doc+") [" + similarity.GetType().Name + "], result of:";
-          Explanation scoreExplanation = docScorer.Explain(doc, new Explanation(freq, "phraseFreq=" + freq));
-          expl.AddDetail(scoreExplanation);
-          expl.Value = scoreExplanation.Value;
-          // now the payloads part
-          // QUESTION: Is there a way to avoid this skipTo call? We need to know
-          // whether to load the payload or not
-          // GSI: I suppose we could toString the payload, but I don't think that
-          // would be a good idea
-          string field = ((SpanQuery)Query).Field;
-          Explanation payloadExpl = function.Explain(doc, field, scorer.payloadsSeen, scorer.payloadScore);
-          payloadExpl.Value = scorer.GetPayloadScore();
-          // combined
-          ComplexExplanation result = new ComplexExplanation();
-          if (includeSpanScore) {
-            result.AddDetail(expl);
-            result.AddDetail(payloadExpl);
-            result.Value = expl.Value * payloadExpl.Value;
-            result.Description = "btq, product of:";
-          } else {
-            result.AddDetail(payloadExpl);
-            result.Value = payloadExpl.Value;
-            result.Description ="btq(includeSpanScore=false), result of:";
-          }
-          result.Match = true; // LUCENE-1303
-          return result;
+
+        public override bool Equals(Object obj)
+        {
+            if (this == obj)
+                return true;
+            if (!base.Equals(obj))
+                return false;
+            if (GetType() != obj.GetType())
+                return false;
+            PayloadTermQuery other = (PayloadTermQuery)obj;
+            if (function == null)
+            {
+                if (other.function != null)
+                    return false;
+            }
+            else if (!function.Equals(other.function))
+                return false;
+            if (includeSpanScore != other.includeSpanScore)
+                return false;
+            return true;
         }
-      }
-      
-      return new ComplexExplanation(false, 0.0f, "no matching term");
-    }
-  }
-
-  public override int GetHashCode() {
-    int prime = 31;
-    int result = base.GetHashCode();
-    result = prime * result + ((function == null) ? 0 : function.GetHashCode());
-    result = prime * result + (includeSpanScore ? 1231 : 1237);
-    return result;
-  }
-
-  public override bool Equals(Object obj) {
-    if (this == obj)
-      return true;
-    if (!base.Equals(obj))
-      return false;
-    if (GetType() != obj.GetType())
-      return false;
-    PayloadTermQuery other = (PayloadTermQuery) obj;
-    if (function == null) {
-      if (other.function != null)
-        return false;
-    } else if (!function.Equals(other.function))
-      return false;
-    if (includeSpanScore != other.includeSpanScore)
-      return false;
-    return true;
-  }
 
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/PhraseQuery.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/PhraseQuery.cs b/src/core/Search/PhraseQuery.cs
index 5e1340f..cc3a63c 100644
--- a/src/core/Search/PhraseQuery.cs
+++ b/src/core/Search/PhraseQuery.cs
@@ -277,7 +277,7 @@ namespace Lucene.Net.Search
             {
                 // assert !terms.isEmpty()
 
-                var reader = context.Reader;
+                var reader = context.AtomicReader;
                 var liveDocs = acceptDocs;
                 var postingsFreqs = new PostingsAndFreq[parent.terms.Count];
 
@@ -318,7 +318,7 @@ namespace Lucene.Net.Search
                 if (parent.slop == 0)
                 {
                     var s = new ExactPhraseScorer(this, postingsFreqs, similarity.GetExactSimScorer(stats, context));
-                    if (s.NoDocs)
+                    if (s.noDocs)
                     {
                         return null;
                     }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/QueryWrapperFilter.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/QueryWrapperFilter.cs b/src/core/Search/QueryWrapperFilter.cs
index 2eb1a94..3dc72f8 100644
--- a/src/core/Search/QueryWrapperFilter.cs
+++ b/src/core/Search/QueryWrapperFilter.cs
@@ -73,9 +73,9 @@ namespace Lucene.Net.Search
 		
 		public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs)
 		{
-		    var privateContext = context.Reader.Context;
+		    var privateContext = context.AtomicReader.AtomicContext;
 		    var weight = new IndexSearcher(privateContext).CreateNormalizedWeight(query);
-            return new AnonymousClassDocIdSet(this);
+            return new AnonymousClassDocIdSet(weight, privateContext, acceptDocs);
 		}
 		
 		public override string ToString()

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/ReqExclScorer.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/ReqExclScorer.cs b/src/core/Search/ReqExclScorer.cs
index 4c8fe5e..d910514 100644
--- a/src/core/Search/ReqExclScorer.cs
+++ b/src/core/Search/ReqExclScorer.cs
@@ -124,7 +124,7 @@ namespace Lucene.Net.Search
         {
             get
             {
-                return reqScorer.Freq();
+                return reqScorer.Freq;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/ScoreCachingWrappingScorer.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/ScoreCachingWrappingScorer.cs b/src/core/Search/ScoreCachingWrappingScorer.cs
index aecfa92..55898b7 100644
--- a/src/core/Search/ScoreCachingWrappingScorer.cs
+++ b/src/core/Search/ScoreCachingWrappingScorer.cs
@@ -65,7 +65,7 @@ namespace Lucene.Net.Search
         {
             get
             {
-                return scorer.Freq();
+                return scorer.Freq;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/ScoringRewrite.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/ScoringRewrite.cs b/src/core/Search/ScoringRewrite.cs
index a4d2d6b..8ae3ac3 100644
--- a/src/core/Search/ScoringRewrite.cs
+++ b/src/core/Search/ScoringRewrite.cs
@@ -40,9 +40,9 @@ namespace Lucene.Net.Search
         {
             public override Query Rewrite(IndexReader reader, MultiTermQuery query) 
             {
-              var bq = SCORING_BOOLEAN_QUERY_REWRITE.Rewrite(reader, query);
+              var bq = (BooleanQuery)SCORING_BOOLEAN_QUERY_REWRITE.Rewrite(reader, query);
               // TODO: if empty boolean query return NullQuery?
-              if (!bq.Clauses.Any())
+              if (bq.Clauses.Length == 0)
                 return bq;
               // strip the scores off
               var result = new ConstantScoreQuery(bq) {Boost = query.Boost};

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Similarities/SimilarityBase.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Similarities/SimilarityBase.cs b/src/core/Search/Similarities/SimilarityBase.cs
index 7acd358..4166a7b 100644
--- a/src/core/Search/Similarities/SimilarityBase.cs
+++ b/src/core/Search/Similarities/SimilarityBase.cs
@@ -41,7 +41,7 @@ namespace Lucene.Net.Search.Similarities
                                               TermStatistics termStats)
         {
             // assert collectionStats.sumTotalTermFreq() == -1 || collectionStats.sumTotalTermFreq() >= termStats.totalTermFreq();
-            var numberOfDocuments = collectionStats.MaxDocs;
+            var numberOfDocuments = collectionStats.MaxDoc;
 
             var docFreq = termStats.DocFreq;
             var totalTermFreq = termStats.TotalTermFreq;
@@ -104,7 +104,7 @@ namespace Lucene.Net.Search.Similarities
                 for (int i = 0; i < subScorers.Length; i++)
                 {
                     var basicstats = (BasicStats) subStats[i];
-                    subScorers[i] = new BasicExactDocScorer(basicstats, context.Reader.GetNormValues(basicstats.Field),
+                    subScorers[i] = new BasicExactDocScorer(basicstats, context.AtomicReader.GetNormValues(basicstats.Field),
                                                             this);
                 }
                 return new MultiSimilarity.MultiExactDocScorer(subScorers);
@@ -112,7 +112,7 @@ namespace Lucene.Net.Search.Similarities
             else
             {
                 var basicstats = (BasicStats) stats;
-                return new BasicExactDocScorer(basicstats, context.Reader.GetNormValues(basicstats.Field), this);
+                return new BasicExactDocScorer(basicstats, context.AtomicReader.GetNormValues(basicstats.Field), this);
             }
         }
 
@@ -126,7 +126,7 @@ namespace Lucene.Net.Search.Similarities
                 for (int i = 0; i < subScorers.Length; i++)
                 {
                     var basicstats = (BasicStats) subStats[i];
-                    subScorers[i] = new BasicSloppyDocScorer(basicstats, context.Reader.GetNormValues(basicstats.Field),
+                    subScorers[i] = new BasicSloppyDocScorer(basicstats, context.AtomicReader.GetNormValues(basicstats.Field),
                                                              this);
                 }
                 return new MultiSimilarity.MultiSloppyDocScorer(subScorers);
@@ -134,7 +134,7 @@ namespace Lucene.Net.Search.Similarities
             else
             {
                 var basicstats = (BasicStats) stats;
-                return new BasicSloppyDocScorer(basicstats, context.Reader.GetNormValues(basicstats.Field), this);
+                return new BasicSloppyDocScorer(basicstats, context.AtomicReader.GetNormValues(basicstats.Field), this);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Similarities/TFIDFSimilarity.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Similarities/TFIDFSimilarity.cs b/src/core/Search/Similarities/TFIDFSimilarity.cs
index 232742a..e20dbfc 100644
--- a/src/core/Search/Similarities/TFIDFSimilarity.cs
+++ b/src/core/Search/Similarities/TFIDFSimilarity.cs
@@ -12,7 +12,7 @@ namespace Lucene.Net.Search.Similarities
         {
             for (int i = 0; i < 256; i++)
             {
-                NORM_TABLE[i] = SmallFloat.Byte315ToFloat((byte) i);
+                NORM_TABLE[i] = SmallFloat.Byte315ToFloat((sbyte) i);
             }
         }
 
@@ -87,13 +87,13 @@ namespace Lucene.Net.Search.Similarities
         public override sealed ExactSimScorer GetExactSimScorer(SimWeight stats, AtomicReaderContext context)
         {
             var idfstats = (IDFStats) stats;
-            return new ExactTFIDFDocScorer(idfstats, context.Reader.GetNormValues(idfstats.Field), this);
+            return new ExactTFIDFDocScorer(idfstats, context.AtomicReader.GetNormValues(idfstats.Field), this);
         }
 
         public override sealed SloppySimScorer GetSloppySimScorer(SimWeight stats, AtomicReaderContext context)
         {
             var idfstats = (IDFStats) stats;
-            return new SloppyTFIDFDocScorer(idfstats, context.Reader.GetNormValues(idfstats.Field), this);
+            return new SloppyTFIDFDocScorer(idfstats, context.AtomicReader.GetNormValues(idfstats.Field), this);
         }
 
         private Explanation ExplainScore(int doc, Explanation freq, IDFStats stats, NumericDocValues norms)

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Spans/NearSpansOrdered.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Spans/NearSpansOrdered.cs b/src/core/Search/Spans/NearSpansOrdered.cs
index a22ff84..43c711d 100644
--- a/src/core/Search/Spans/NearSpansOrdered.cs
+++ b/src/core/Search/Spans/NearSpansOrdered.cs
@@ -181,7 +181,7 @@ namespace Lucene.Net.Search.Spans
             if (firstTime)
             {
                 firstTime = false;
-                foreach (Spans t in subSpans)
+                foreach (SpansBase t in subSpans)
                 {
                     if (!t.Next())
                     {
@@ -356,7 +356,7 @@ namespace Lucene.Net.Search.Spans
             int lastEnd = matchEnd;
             for (int i = subSpans.Length - 2; i >= 0; i--)
             {
-                Spans prevSpans = subSpans[i];
+                SpansBase prevSpans = subSpans[i];
                 if (collectPayloads && prevSpans.IsPayloadAvailable())
                 {
                     ICollection<sbyte[]> payload = prevSpans.GetPayload();

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/733dc181/src/core/Search/Spans/NearSpansUnordered.cs
----------------------------------------------------------------------
diff --git a/src/core/Search/Spans/NearSpansUnordered.cs b/src/core/Search/Spans/NearSpansUnordered.cs
index d472b87..f16c25e 100644
--- a/src/core/Search/Spans/NearSpansUnordered.cs
+++ b/src/core/Search/Spans/NearSpansUnordered.cs
@@ -183,7 +183,7 @@ namespace Lucene.Net.Search.Spans
 
             SpanQuery[] clauses = query.GetClauses();
             queue = new CellQueue(this, clauses.Length);
-            subSpans = new Spans[clauses.Length];
+            subSpans = new SpansBase[clauses.Length];
             for (int i = 0; i < clauses.Length; i++)
             {
                 SpansCell cell = new SpansCell(this, clauses[i].GetSpans(context, acceptDocs, termContexts), i);