You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by do...@apache.org on 2009/07/29 20:04:24 UTC

svn commit: r798995 [30/35] - in /incubator/lucene.net/trunk/C#/src: Lucene.Net/ Lucene.Net/Analysis/ Lucene.Net/Analysis/Standard/ Lucene.Net/Document/ Lucene.Net/Index/ Lucene.Net/QueryParser/ Lucene.Net/Search/ Lucene.Net/Search/Function/ Lucene.Net...

Added: incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/PayloadHelper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Payloads/PayloadHelper.cs?rev=798995&view=auto
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/PayloadHelper.cs (added)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/PayloadHelper.cs Wed Jul 29 18:04:12 2009
@@ -0,0 +1,123 @@
+/*
+ * 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 Analyzer = Lucene.Net.Analysis.Analyzer;
+using LowerCaseTokenizer = Lucene.Net.Analysis.LowerCaseTokenizer;
+using Token = Lucene.Net.Analysis.Token;
+using TokenFilter = Lucene.Net.Analysis.TokenFilter;
+using TokenStream = Lucene.Net.Analysis.TokenStream;
+using Document = Lucene.Net.Documents.Document;
+using Field = Lucene.Net.Documents.Field;
+using IndexWriter = Lucene.Net.Index.IndexWriter;
+using _Payload = Lucene.Net.Index.Payload;
+using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+using Similarity = Lucene.Net.Search.Similarity;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+using English = Lucene.Net.Util.English;
+
+namespace Lucene.Net.Search.Payloads
+{
+    public class PayloadHelper
+    {
+        private static readonly byte[] payloadField = new byte[] { 1 };
+        private static readonly byte[] payloadMultiField1 = new byte[] { 2 };
+        private static readonly byte[] payloadMultiField2 = new byte[] { 4 };
+        public static readonly string NO_PAYLOAD_FIELD = "noPayloadField";
+        public static readonly string MULTI_FIELD = "multiField";
+        public static readonly string FIELD = "field";
+
+        public class PayloadAnalyzer : Analyzer
+        {
+            public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
+            {
+                TokenStream result = new LowerCaseTokenizer(reader);
+                result = new PayloadFilter(result, fieldName);
+                return result;
+            }
+        }
+
+        public class PayloadFilter : TokenFilter
+        {
+            string fieldName;
+            int numSeen = 0;
+
+            public PayloadFilter(TokenStream input, string fieldName)
+                : base(input)
+            {
+                this.fieldName = fieldName;
+            }
+
+            public override Token Next()
+            {
+                Token result = input.Next();
+                if (result != null)
+                {
+                    if (fieldName.Equals(FIELD))
+                    {
+                        result.SetPayload(new _Payload(PayloadHelper.payloadField));
+                    }
+                    else if (fieldName.Equals(MULTI_FIELD))
+                    {
+                        if (numSeen % 2 == 0)
+                        {
+                            result.SetPayload(new _Payload(PayloadHelper.payloadMultiField1));
+                        }
+                        else
+                        {
+                            result.SetPayload(new _Payload(PayloadHelper.payloadMultiField2));
+                        }
+                        numSeen++;
+                    }
+
+                }
+                return result;
+            }
+        }
+
+        /**
+         * Sets up a RAMDirectory, and adds documents (using English.intToEnglish()) with two fields: field and multiField
+         * and analyzes them using the PayloadAnalyzer
+         * @param similarity The Similarity class to use in the Searcher
+         * @param numDocs The num docs to add
+         * @return An IndexSearcher
+         * @throws IOException
+         */
+        public IndexSearcher SetUp(Similarity similarity, int numDocs)
+        {
+            RAMDirectory directory = new RAMDirectory();
+            PayloadAnalyzer analyzer = new PayloadAnalyzer();
+            IndexWriter writer
+                    = new IndexWriter(directory, analyzer, true);
+            writer.SetSimilarity(similarity);
+            //writer.infoStream = System.out;
+            for (int i = 0; i < numDocs; i++)
+            {
+                Document doc = new Document();
+                doc.Add(new Field(FIELD, English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
+                doc.Add(new Field(MULTI_FIELD, English.IntToEnglish(i) + "  " + English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
+                doc.Add(new Field(NO_PAYLOAD_FIELD, English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
+                writer.AddDocument(doc);
+            }
+            //writer.optimize();
+            writer.Close();
+
+            IndexSearcher searcher = new IndexSearcher(directory);
+            searcher.SetSimilarity(similarity);
+            return searcher;
+        }
+    }
+}

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/TestBoostingTermQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Payloads/TestBoostingTermQuery.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/TestBoostingTermQuery.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Payloads/TestBoostingTermQuery.cs Wed Jul 29 18:04:12 2009
@@ -19,22 +19,31 @@
 
 using NUnit.Framework;
 
+using Analyzer = Lucene.Net.Analysis.Analyzer;
+using LowerCaseTokenizer = Lucene.Net.Analysis.LowerCaseTokenizer;
+using Token = Lucene.Net.Analysis.Token;
+using TokenFilter = Lucene.Net.Analysis.TokenFilter;
+using TokenStream = Lucene.Net.Analysis.TokenStream;
 using Document = Lucene.Net.Documents.Document;
 using Field = Lucene.Net.Documents.Field;
 using IndexWriter = Lucene.Net.Index.IndexWriter;
-using Payload = Lucene.Net.Index.Payload;
+using _Payload = Lucene.Net.Index.Payload;
 using Term = Lucene.Net.Index.Term;
-using RAMDirectory = Lucene.Net.Store.RAMDirectory;
-using Lucene.Net.Analysis;
-using Lucene.Net.Search;
-using Searchable = Lucene.Net.Search.Searchable;
+using BooleanClause = Lucene.Net.Search.BooleanClause;
+using BooleanQuery = Lucene.Net.Search.BooleanQuery;
+using CheckHits = Lucene.Net.Search.CheckHits;
+using DefaultSimilarity = Lucene.Net.Search.DefaultSimilarity;
+using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+using ScoreDoc = Lucene.Net.Search.ScoreDoc;
+using TopDocs = Lucene.Net.Search.TopDocs;
+using _Spans = Lucene.Net.Search.Spans.Spans;
 using TermSpans = Lucene.Net.Search.Spans.TermSpans;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
 using English = Lucene.Net.Util.English;
 using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net.Search.Payloads
 {
-	
 	[TestFixture]
 	public class TestBoostingTermQuery : LuceneTestCase
 	{
@@ -111,29 +120,30 @@
 				this.fieldName = fieldName;
 			}
 			
-			public override Token Next()
+			public override Token Next(Token reusableToken)
 			{
-				Token result = input.Next();
-				if (result != null)
+                System.Diagnostics.Debug.Assert(reusableToken != null);
+				Token nextToken = input.Next(reusableToken);
+				if (nextToken != null)
 				{
 					if (fieldName.Equals("field"))
 					{
-						result.SetPayload(new Payload(Enclosing_Instance.payloadField));
+						nextToken.SetPayload(new _Payload(Enclosing_Instance.payloadField));
 					}
 					else if (fieldName.Equals("multiField"))
 					{
 						if (numSeen % 2 == 0)
 						{
-							result.SetPayload(new Payload(Enclosing_Instance.payloadMultiField1));
+                            nextToken.SetPayload(new _Payload(Enclosing_Instance.payloadMultiField1));
 						}
 						else
 						{
-							result.SetPayload(new Payload(Enclosing_Instance.payloadMultiField2));
+                            nextToken.SetPayload(new _Payload(Enclosing_Instance.payloadMultiField2));
 						}
 						numSeen++;
 					}
 				}
-				return result;
+				return nextToken;
 			}
 		}
 		
@@ -143,17 +153,17 @@
 			base.SetUp();
 			RAMDirectory directory = new RAMDirectory();
 			PayloadAnalyzer analyzer = new PayloadAnalyzer(this);
-			IndexWriter writer = new IndexWriter(directory, analyzer, true);
+			IndexWriter writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.SetSimilarity(similarity);
 			//writer.infoStream = System.out;
 			for (int i = 0; i < 1000; i++)
 			{
 				Document doc = new Document();
-				Field noPayloadField = new Field("noPayLoad", English.IntToEnglish(i), Field.Store.YES, Field.Index.TOKENIZED);
-				noPayloadField.SetBoost(0);
+				Field noPayloadField = new Field(PayloadHelper.NO_PAYLOAD_FIELD, English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED);
+				//noPayloadField.SetBoost(0);
 				doc.Add(noPayloadField);
-				doc.Add(new Field("field", English.IntToEnglish(i), Field.Store.YES, Field.Index.TOKENIZED));
-				doc.Add(new Field("multiField", English.IntToEnglish(i) + "  " + English.IntToEnglish(i), Field.Store.YES, Field.Index.TOKENIZED));
+				doc.Add(new Field("field", English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
+				doc.Add(new Field("multiField", English.IntToEnglish(i) + "  " + English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
 				writer.AddDocument(doc);
 			}
 			writer.Optimize();
@@ -180,7 +190,7 @@
 				ScoreDoc doc = hits.scoreDocs[i];
 				Assert.IsTrue(doc.score == 1, doc.score + " does not equal: " + 1);
 			}
-			CheckHits.CheckExplanations(query, "field", searcher, true);
+			CheckHits.CheckExplanations(query, PayloadHelper.FIELD, searcher, true);
 			Lucene.Net.Search.Spans.Spans spans = query.GetSpans(searcher.GetIndexReader());
 			Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
 			Assert.IsTrue(spans is TermSpans, "spans is not an instanceof " + typeof(TermSpans));
@@ -194,7 +204,7 @@
 		[Test]
 		public virtual void  TestMultipleMatchesPerDoc()
 		{
-			BoostingTermQuery query = new BoostingTermQuery(new Term("multiField", "seventy"));
+			BoostingTermQuery query = new BoostingTermQuery(new Term(PayloadHelper.MULTI_FIELD, "seventy"));
 			TopDocs hits = searcher.Search(query, null, 100);
 			Assert.IsTrue(hits != null, "hits is null and it shouldn't be");
 			Assert.IsTrue(hits.totalHits == 100, "hits Size: " + hits.totalHits + " is not: " + 100);
@@ -238,7 +248,7 @@
 		[Test]
 		public virtual void  TestNoMatch()
 		{
-			BoostingTermQuery query = new BoostingTermQuery(new Term("field", "junk"));
+			BoostingTermQuery query = new BoostingTermQuery(new Term(PayloadHelper.FIELD, "junk"));
 			TopDocs hits = searcher.Search(query, null, 100);
 			Assert.IsTrue(hits != null, "hits is null and it shouldn't be");
 			Assert.IsTrue(hits.totalHits == 0, "hits Size: " + hits.totalHits + " is not: " + 0);
@@ -247,8 +257,8 @@
 		[Test]
 		public virtual void  TestNoPayload()
 		{
-			BoostingTermQuery q1 = new BoostingTermQuery(new Term("noPayLoad", "zero"));
-			BoostingTermQuery q2 = new BoostingTermQuery(new Term("noPayLoad", "foo"));
+            BoostingTermQuery q1 = new BoostingTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "zero"));
+            BoostingTermQuery q2 = new BoostingTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "foo"));
 			BooleanClause c1 = new BooleanClause(q1, BooleanClause.Occur.MUST);
 			BooleanClause c2 = new BooleanClause(q2, BooleanClause.Occur.MUST_NOT);
 			BooleanQuery query = new BooleanQuery();
@@ -256,10 +266,10 @@
 			query.Add(c2);
 			TopDocs hits = searcher.Search(query, null, 100);
 			Assert.IsTrue(hits != null, "hits is null and it shouldn't be");
-			//Assert.IsTrue(hits.totalHits == 1, "hits Size: " + hits.totalHits + " is not: " + 1);
+			Assert.IsTrue(hits.totalHits == 1, "hits Size: " + hits.totalHits + " is not: " + 1);
 			int[] results = new int[1];
 			results[0] = 0; //hits.scoreDocs[0].doc;
-			CheckHits.CheckHitCollector(query, "noPayLoad", searcher, results);
+            CheckHits.CheckHitCollector(query, PayloadHelper.NO_PAYLOAD_FIELD, searcher, results);
 		}
 		
 		// must be static for weight serialization tests 

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/QueryUtils.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/QueryUtils.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/QueryUtils.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/QueryUtils.cs Wed Jul 29 18:04:12 2009
@@ -21,9 +21,6 @@
 
 namespace Lucene.Net.Search
 {
-	
-	/// <author>  yonik
-	/// </author>
 	public class QueryUtils
 	{
 		[Serializable]

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/RemoteCachingWrapperFilterHelper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/RemoteCachingWrapperFilterHelper.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/RemoteCachingWrapperFilterHelper.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/RemoteCachingWrapperFilterHelper.cs Wed Jul 29 18:04:12 2009
@@ -27,8 +27,6 @@
 	/// <summary> A unit test helper class to help with RemoteCachingWrapperFilter testing and
 	/// assert that it is working correctly.
 	/// </summary>
-	/// <author>  Matt Ericson
-	/// </author>
 	[Serializable]
 	public class RemoteCachingWrapperFilterHelper : RemoteCachingWrapperFilter
 	{
@@ -44,26 +42,26 @@
 		{
 			this.shouldHaveCache = shouldHaveCache;
 		}
-		
-		public override System.Collections.BitArray Bits(IndexReader reader)
-		{
-			Filter cachedFilter = FilterManager.GetInstance().GetFilter(filter);
-			
-			Assert.IsNotNull(cachedFilter, "Filter should not be null");
-			if (!shouldHaveCache)
-			{
-				Assert.AreSame(filter, cachedFilter, "First time filter should be the same ");
-			}
-			else
-			{
-				Assert.AreNotSame(filter, cachedFilter, "We should have a cached version of the filter");
-			}
-			
-			if (filter is CachingWrapperFilterHelper)
-			{
-				((CachingWrapperFilterHelper) cachedFilter).SetShouldHaveCache(shouldHaveCache);
-			}
-			return cachedFilter.Bits(reader);
-		}
-	}
+
+        public override DocIdSet GetDocIdSet(IndexReader reader)
+        {
+            Filter cachedFilter = FilterManager.GetInstance().GetFilter(filter);
+
+            Assert.IsNotNull(cachedFilter, "Filter should not be null");
+            if (!shouldHaveCache)
+            {
+                Assert.AreSame(filter, cachedFilter, "First time filter should be the same ");
+            }
+            else
+            {
+                Assert.AreNotSame(filter, cachedFilter, "We should have a cached version of the filter");
+            }
+
+            if (filter is CachingWrapperFilterHelper)
+            {
+                ((CachingWrapperFilterHelper)cachedFilter).SetShouldHaveCache(shouldHaveCache);
+            }
+            return cachedFilter.GetDocIdSet(reader);
+        }
+    }
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/SingleDocTestFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/SingleDocTestFilter.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/SingleDocTestFilter.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/SingleDocTestFilter.cs Wed Jul 29 18:04:12 2009
@@ -18,8 +18,9 @@
 using System;
 
 using IndexReader = Lucene.Net.Index.IndexReader;
+using DocIdBitSet = Lucene.Net.Util.DocIdBitSet;
 
-namespace Lucene.Net.search
+namespace Lucene.Net.Search
 {
 	
 	[Serializable]
@@ -31,18 +32,31 @@
 		{
 			this.doc = doc;
 		}
-		
-		public override System.Collections.BitArray Bits(IndexReader reader)
-		{
-			System.Collections.BitArray bits = new System.Collections.BitArray((reader.MaxDoc() % 64 == 0 ? reader.MaxDoc() / 64 : reader.MaxDoc() / 64 + 1) * 64);
 
-			for (int increment = 0; doc >= bits.Length; increment =+ 64)
-			{
-				bits.Length += increment;
-			}
-			bits.Set(doc, true);
-			
-			return bits;
-		}
+        public override DocIdSet GetDocIdSet(IndexReader reader)
+        {
+            System.Collections.BitArray bits = new System.Collections.BitArray((reader.MaxDoc() % 64 == 0 ? reader.MaxDoc() / 64 : reader.MaxDoc() / 64 + 1) * 64);
+
+            for (int increment = 0; doc >= bits.Length; increment = +64)
+            {
+                bits.Length += increment;
+            }
+            bits.Set(doc, true);
+
+            return new DocIdBitSet(bits);
+        }
+        [System.Obsolete()]
+        public override System.Collections.BitArray Bits(IndexReader reader)
+        {
+            System.Collections.BitArray bits = new System.Collections.BitArray((reader.MaxDoc() % 64 == 0 ? reader.MaxDoc() / 64 : reader.MaxDoc() / 64 + 1) * 64);
+
+            for (int increment = 0; doc >= bits.Length; increment = +64)
+            {
+                bits.Length += increment;
+            }
+            bits.Set(doc, true);
+
+            return bits;
+        }
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestBasics.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestBasics.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestBasics.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestBasics.cs Wed Jul 29 18:04:12 2009
@@ -56,12 +56,12 @@
 		{
 			base.SetUp();
 			RAMDirectory directory = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(directory, new SimpleAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			//writer.infoStream = System.out;
 			for (int i = 0; i < 1000; i++)
 			{
 				Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-				doc.Add(new Field("field", English.IntToEnglish(i), Field.Store.YES, Field.Index.TOKENIZED));
+				doc.Add(new Field("field", English.IntToEnglish(i), Field.Store.YES, Field.Index.ANALYZED));
 				writer.AddDocument(doc);
 			}
 			

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestNearSpansOrdered.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestNearSpansOrdered.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestNearSpansOrdered.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestNearSpansOrdered.cs Wed Jul 29 18:04:12 2009
@@ -56,11 +56,11 @@
 		{
 			base.SetUp();
 			RAMDirectory directory = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			for (int i = 0; i < docFields.Length; i++)
 			{
 				Document doc = new Document();
-				doc.Add(new Field(FIELD, docFields[i], Field.Store.NO, Field.Index.TOKENIZED));
+				doc.Add(new Field(FIELD, docFields[i], Field.Store.NO, Field.Index.ANALYZED));
 				writer.AddDocument(doc);
 			}
 			writer.Close();

Added: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestPayloadSpans.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestPayloadSpans.cs?rev=798995&view=auto
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestPayloadSpans.cs (added)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestPayloadSpans.cs Wed Jul 29 18:04:12 2009
@@ -0,0 +1,403 @@
+/**
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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 NUnit.Framework;
+
+using Analyzer = Lucene.Net.Analysis.Analyzer;
+using LowerCaseTokenizer = Lucene.Net.Analysis.LowerCaseTokenizer;
+using Token = Lucene.Net.Analysis.Token;
+using TokenFilter = Lucene.Net.Analysis.TokenFilter;
+using TokenStream = Lucene.Net.Analysis.TokenStream;
+using Document = Lucene.Net.Documents.Document;
+using Field = Lucene.Net.Documents.Field;
+using IndexReader = Lucene.Net.Index.IndexReader;
+using IndexWriter = Lucene.Net.Index.IndexWriter;
+using Payload = Lucene.Net.Index.Payload;
+using Term = Lucene.Net.Index.Term;
+using DefaultSimilarity = Lucene.Net.Search.DefaultSimilarity;
+using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+using Similarity = Lucene.Net.Search.Similarity;
+using TermQuery = Lucene.Net.Search.TermQuery;
+using PayloadHelper = Lucene.Net.Search.Payloads.PayloadHelper;
+using PayloadSpanUtil = Lucene.Net.Search.Payloads.PayloadSpanUtil;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+
+namespace Lucene.Net.Search.Spans
+{
+    [TestFixture]
+    public class TestPayloadSpans
+    {
+        private readonly static bool DEBUG = false;
+        private IndexSearcher searcher;
+        private Similarity similarity = new DefaultSimilarity();
+        protected IndexReader indexReader;
+
+        [SetUp]
+        protected void SetUp()
+        {
+            PayloadHelper helper = new PayloadHelper();
+            searcher = helper.SetUp(similarity, 1000);
+            indexReader = searcher.GetIndexReader();
+        }
+
+        [TearDown]
+        protected void TearDown()
+        {
+
+        }
+
+        [Test]
+        public void TestSpanTermQuery()
+        {
+            SpanTermQuery stq;
+            PayloadSpans spans;
+            stq = new SpanTermQuery(new Term(PayloadHelper.FIELD, "seventy"));
+            spans = stq.GetPayloadSpans(indexReader);
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 100, 1, 1, 1);
+
+            stq = new SpanTermQuery(new Term(PayloadHelper.NO_PAYLOAD_FIELD, "seventy"));
+            spans = stq.GetPayloadSpans(indexReader);
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 100, 0, 0, 0);
+        }
+        [Test]
+        public void TestSpanFirst()
+        {
+
+            SpanQuery match;
+            SpanFirstQuery sfq;
+            match = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
+            sfq = new SpanFirstQuery(match, 2);
+            PayloadSpans spans = sfq.GetPayloadSpans(indexReader);
+            CheckSpans(spans, 109, 1, 1, 1);
+            //Test more complicated subclause
+            SpanQuery[] clauses = new SpanQuery[2];
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "hundred"));
+            match = new SpanNearQuery(clauses, 0, true);
+            sfq = new SpanFirstQuery(match, 2);
+            CheckSpans(sfq.GetPayloadSpans(indexReader), 100, 2, 1, 1);
+
+            match = new SpanNearQuery(clauses, 0, false);
+            sfq = new SpanFirstQuery(match, 2);
+            CheckSpans(sfq.GetPayloadSpans(indexReader), 100, 2, 1, 1);
+
+        }
+
+        [Test]
+        public void TestNestedSpans()
+        {
+            SpanTermQuery stq;
+            PayloadSpans spans;
+            IndexSearcher searcher = GetSearcher();
+            stq = new SpanTermQuery(new Term(PayloadHelper.FIELD, "mark"));
+            spans = stq.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 0, null);
+
+
+            SpanQuery[] clauses = new SpanQuery[3];
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));
+            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
+            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 12, false);
+
+            spans = spanNearQuery.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 2, new int[] { 3, 3 });
+
+
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));
+            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));
+
+            spanNearQuery = new SpanNearQuery(clauses, 6, true);
+
+
+            spans = spanNearQuery.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 1, new int[] { 3 });
+
+            clauses = new SpanQuery[2];
+
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "xx"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "rr"));
+
+            spanNearQuery = new SpanNearQuery(clauses, 6, true);
+
+
+            SpanQuery[] clauses2 = new SpanQuery[2];
+
+            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy"));
+            clauses2[1] = spanNearQuery;
+
+            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses2, 6, false);
+
+            spans = nestedSpanNearQuery.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 2, new int[] { 3, 3 });
+        }
+
+        public void TestFirstClauseWithoutPayload()
+        {
+            PayloadSpans spans;
+            IndexSearcher searcher = GetSearcher();
+
+            SpanQuery[] clauses = new SpanQuery[3];
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "nopayload"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "qq"));
+            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "ss"));
+
+            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 6, true);
+
+            SpanQuery[] clauses2 = new SpanQuery[2];
+
+            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "pp"));
+            clauses2[1] = spanNearQuery;
+
+            SpanNearQuery snq = new SpanNearQuery(clauses2, 6, false);
+
+            SpanQuery[] clauses3 = new SpanQuery[2];
+
+            clauses3[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "np"));
+            clauses3[1] = snq;
+
+            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses3, 6, false);
+
+            spans = nestedSpanNearQuery.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 1, new int[] { 3 });
+        }
+
+        public void TestHeavilyNestedSpanQuery()
+        {
+            PayloadSpans spans;
+            IndexSearcher searcher = GetSearcher();
+
+            SpanQuery[] clauses = new SpanQuery[3];
+            clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one"));
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "two"));
+            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "three"));
+
+            SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 5, true);
+
+            clauses = new SpanQuery[3];
+            clauses[0] = spanNearQuery;
+            clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "five"));
+            clauses[2] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "six"));
+
+            SpanNearQuery spanNearQuery2 = new SpanNearQuery(clauses, 6, true);
+
+            SpanQuery[] clauses2 = new SpanQuery[2];
+            clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "eleven"));
+            clauses2[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "ten"));
+            SpanNearQuery spanNearQuery3 = new SpanNearQuery(clauses2, 2, false);
+
+            SpanQuery[] clauses3 = new SpanQuery[3];
+            clauses3[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "nine"));
+            clauses3[1] = spanNearQuery2;
+            clauses3[2] = spanNearQuery3;
+
+            SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses3, 6, false);
+
+            spans = nestedSpanNearQuery.GetPayloadSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            CheckSpans(spans, 2, new int[] { 8, 8 });
+        }
+
+        public void TestPayloadSpanUtil()
+        {
+            RAMDirectory directory = new RAMDirectory();
+            PayloadAnalyzer analyzer = new PayloadAnalyzer();
+            string[] docs = new string[] { };
+            IndexWriter writer = new IndexWriter(directory, analyzer, true);
+            writer.SetSimilarity(similarity);
+            Document doc = new Document();
+            doc.Add(new Field(PayloadHelper.FIELD, "xx rr yy mm  pp", Field.Store.YES, Field.Index.ANALYZED));
+            writer.AddDocument(doc);
+
+            writer.Close();
+
+            IndexSearcher searcher = new IndexSearcher(directory);
+
+            IndexReader reader = searcher.GetIndexReader();
+            PayloadSpanUtil psu = new PayloadSpanUtil(reader);
+
+            System.Collections.Generic.ICollection<byte[]> payloads = psu.GetPayloadsForQuery(new TermQuery(new Term(PayloadHelper.FIELD, "rr")));
+            if (DEBUG)
+                System.Console.WriteLine("Num payloads:" + payloads.Count);
+            System.Collections.Generic.IEnumerator<byte[]> it = payloads.GetEnumerator();
+            while (it.MoveNext())
+            {
+                byte[] bytes = it.Current;
+                if (DEBUG)
+                    System.Console.WriteLine(System.Text.Encoding.Default.GetString(bytes));
+            }
+
+        }
+
+        private void CheckSpans(PayloadSpans spans, int expectedNumSpans, int expectedNumPayloads,
+                                int expectedPayloadLength, int expectedFirstByte)
+        {
+            Assert.IsTrue(spans != null, "spans is null and it shouldn't be");
+            //each position match should have a span associated with it, since there is just one underlying term query, there should
+            //only be one entry in the span
+            int seen = 0;
+            while (spans.Next() == true)
+            {
+                //if we expect payloads, then isPayloadAvailable should be true
+                if (expectedNumPayloads > 0)
+                {
+                    Assert.IsTrue(spans.IsPayloadAvailable() == true, "isPayloadAvailable is not returning the correct value: " + spans.IsPayloadAvailable()
+                            + " and it should be: " + (expectedNumPayloads > 0));
+                }
+                else
+                {
+                    Assert.IsTrue(spans.IsPayloadAvailable() == false, "isPayloadAvailable should be false");
+                }
+                //See payload helper, for the PayloadHelper.FIELD field, there is a single byte payload at every token
+                if (spans.IsPayloadAvailable())
+                {
+                    System.Collections.Generic.ICollection<byte[]> payload = spans.GetPayload();
+                    Assert.IsTrue(payload.Count == expectedNumPayloads, "payload Size: " + payload.Count + " is not: " + expectedNumPayloads);
+                    for (System.Collections.Generic.IEnumerator<byte[]> iterator = payload.GetEnumerator(); iterator.MoveNext(); )
+                    {
+                        byte[] thePayload = iterator.Current;
+                        Assert.IsTrue(thePayload.Length == expectedPayloadLength, "payload[0] Size: " + thePayload.Length + " is not: " + expectedPayloadLength);
+                        Assert.IsTrue(thePayload[0] == expectedFirstByte, thePayload[0] + " does not equal: " + expectedFirstByte);
+
+                    }
+
+                }
+                seen++;
+            }
+            Assert.IsTrue(seen == expectedNumSpans, seen + " does not equal: " + expectedNumSpans);
+        }
+
+        private IndexSearcher GetSearcher()
+        {
+            RAMDirectory directory = new RAMDirectory();
+            PayloadAnalyzer analyzer = new PayloadAnalyzer();
+            string[] docs = new string[] { "xx rr yy mm  pp", "xx yy mm rr pp", "nopayload qq ss pp np", "one two three four five six seven eight nine ten eleven", "nine one two three four five six seven eight eleven ten" };
+            IndexWriter writer = new IndexWriter(directory, analyzer, true);
+
+            writer.SetSimilarity(similarity);
+
+            Document doc = null;
+            for (int i = 0; i < docs.Length; i++)
+            {
+                doc = new Document();
+                string docText = docs[i];
+                doc.Add(new Field(PayloadHelper.FIELD, docText, Field.Store.YES, Field.Index.ANALYZED));
+                writer.AddDocument(doc);
+            }
+
+            writer.Close();
+
+            IndexSearcher searcher = new IndexSearcher(directory);
+            return searcher;
+        }
+
+        private void CheckSpans(PayloadSpans spans, int numSpans, int[] numPayloads)
+        {
+            int cnt = 0;
+
+            while (spans.Next() == true)
+            {
+                if (DEBUG)
+                    System.Console.WriteLine("\nSpans Dump --");
+                if (spans.IsPayloadAvailable())
+                {
+                    System.Collections.Generic.ICollection<byte[]> payload = spans.GetPayload();
+                    if (DEBUG)
+                        System.Console.WriteLine("payloads for span:" + payload.Count);
+                    System.Collections.Generic.IEnumerator<byte[]> it = payload.GetEnumerator();
+                    while (it.MoveNext())
+                    {
+                        byte[] bytes = it.Current;
+                        if (DEBUG)
+                            System.Console.WriteLine("doc:" + spans.Doc() + " s:" + spans.Start() + " e:" + spans.End() + " "
+                              + System.Text.Encoding.Default.GetString(bytes));
+                    }
+
+                    Assert.AreEqual(numPayloads[cnt], payload.Count);
+                }
+                else
+                {
+                    Assert.IsFalse(numPayloads.Length > 0 && numPayloads[cnt] > 0, "Expected spans:" + numPayloads[cnt] + " found: 0");
+                }
+                cnt++;
+            }
+
+            Assert.AreEqual(numSpans, cnt);
+        }
+
+        class PayloadAnalyzer : Analyzer
+        {
+            override public TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
+            {
+                TokenStream result = new LowerCaseTokenizer(reader);
+                result = new PayloadFilter(result, fieldName);
+                return result;
+            }
+        }
+
+        class PayloadFilter : TokenFilter
+        {
+            string fieldName;
+            //int numSeen = 0;
+            System.Collections.Generic.Dictionary<string, string> entities = new System.Collections.Generic.Dictionary<string, string>();
+            System.Collections.Generic.Dictionary<string, string> nopayload = new System.Collections.Generic.Dictionary<string, string>();
+            int pos;
+
+            public PayloadFilter(TokenStream input, string fieldName)
+                : base(input)
+            {
+                this.fieldName = fieldName;
+                pos = 0;
+                entities["xx"] = "xx";
+                entities["one"] = "one";
+                nopayload["nopayload"] = "nopayload";
+                nopayload["np"] = "np";
+
+            }
+
+            override public Token Next()
+            {
+                Token result = input.Next();
+                if (result != null)
+                {
+                    string token = new string(result.TermBuffer(), 0, result.TermLength());
+
+                    if (!nopayload.ContainsKey(token))
+                    {
+                        if (entities.ContainsKey(token))
+                        {
+                            result.SetPayload(new Lucene.Net.Index.Payload(System.Text.Encoding.Default.GetBytes(token + ":Entity:" + pos)));
+                        }
+                        else
+                        {
+                            result.SetPayload(new Lucene.Net.Index.Payload(System.Text.Encoding.Default.GetBytes(token + ":Noise:" + pos)));
+                        }
+                    }
+                    pos += result.GetPositionIncrement();
+                }
+                return result;
+            }
+        }
+    }
+}
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpans.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestSpans.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpans.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpans.cs Wed Jul 29 18:04:12 2009
@@ -19,261 +19,479 @@
 
 using NUnit.Framework;
 
-using Document = Lucene.Net.Documents.Document;
-using Field = Lucene.Net.Documents.Field;
+using IndexSearcher = Lucene.Net.Search.IndexSearcher;
+using Query = Lucene.Net.Search.Query;
+using CheckHits = Lucene.Net.Search.CheckHits;
+using DefaultSimilarity = Lucene.Net.Search.DefaultSimilarity;
+using Similarity = Lucene.Net.Search.Similarity;
+using Scorer = Lucene.Net.Search.Scorer;
+using TermQuery = Lucene.Net.Search.TermQuery;
+using Searcher = Lucene.Net.Search.Searcher;
+using RAMDirectory = Lucene.Net.Store.RAMDirectory;
+using Directory = Lucene.Net.Store.Directory;
+using MockRAMDirectory = Lucene.Net.Store.MockRAMDirectory;
+using StandardAnalyzer = Lucene.Net.Analysis.Standard.StandardAnalyzer;
 using IndexWriter = Lucene.Net.Index.IndexWriter;
+using IndexReader = Lucene.Net.Index.IndexReader;
 using Term = Lucene.Net.Index.Term;
-using RAMDirectory = Lucene.Net.Store.RAMDirectory;
 using WhitespaceAnalyzer = Lucene.Net.Analysis.WhitespaceAnalyzer;
-using CheckHits = Lucene.Net.Search.CheckHits;
-using IndexSearcher = Lucene.Net.Search.IndexSearcher;
-using Query = Lucene.Net.Search.Query;
+using Document = Lucene.Net.Documents.Document;
+using Field = Lucene.Net.Documents.Field;
 using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
 
 namespace Lucene.Net.Search.Spans
 {
-	[TestFixture]
-	public class TestSpans : LuceneTestCase
-	{
-		private IndexSearcher searcher;
-		
-		public const System.String field = "field";
-		
-		[SetUp]
-		public override void SetUp()
-		{
-			base.SetUp();
-			RAMDirectory directory = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
-			for (int i = 0; i < docFields.Length; i++)
-			{
-				Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-				doc.Add(new Field(field, docFields[i], Field.Store.YES, Field.Index.TOKENIZED));
-				writer.AddDocument(doc);
-			}
-			writer.Close();
-			searcher = new IndexSearcher(directory);
-			//System.out.println("set up " + getName());
-		}
-		
-		private System.String[] docFields = new System.String[]{"w1 w2 w3 w4 w5", "w1 w3 w2 w3", "w1 xx w2 yy w3", "w1 w3 xx w2 yy w3", "u2 u2 u1", "u2 xx u2 u1", "u2 u2 xx u1", "u2 xx u2 yy u1", "u2 xx u1 u2", "u2 u1 xx u2", "u1 u2 xx u2", "t1 t2 t1 t3 t2 t3"};
-		
-		public virtual SpanTermQuery MakeSpanTermQuery(System.String text)
-		{
-			return new SpanTermQuery(new Term(field, text));
-		}
-		
-		private void  CheckHits(Query query, int[] results)
-		{
-			Lucene.Net.Search.CheckHits.CheckHits_Renamed(query, field, searcher, results);
-		}
-		
-		private void  OrderedSlopTest3SQ(SpanQuery q1, SpanQuery q2, SpanQuery q3, int slop, int[] expectedDocs)
-		{
-			bool ordered = true;
-			SpanNearQuery snq = new SpanNearQuery(new SpanQuery[]{q1, q2, q3}, slop, ordered);
-			CheckHits(snq, expectedDocs);
-		}
-		
-		public virtual void  OrderedSlopTest3(int slop, int[] expectedDocs)
-		{
-			OrderedSlopTest3SQ(MakeSpanTermQuery("w1"), MakeSpanTermQuery("w2"), MakeSpanTermQuery("w3"), slop, expectedDocs);
-		}
-		
-		public virtual void  OrderedSlopTest3Equal(int slop, int[] expectedDocs)
-		{
-			OrderedSlopTest3SQ(MakeSpanTermQuery("w1"), MakeSpanTermQuery("w3"), MakeSpanTermQuery("w3"), slop, expectedDocs);
-		}
-		
-		public virtual void  OrderedSlopTest1Equal(int slop, int[] expectedDocs)
-		{
-			OrderedSlopTest3SQ(MakeSpanTermQuery("u2"), MakeSpanTermQuery("u2"), MakeSpanTermQuery("u1"), slop, expectedDocs);
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrdered01()
-		{
-			OrderedSlopTest3(0, new int[]{0});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrdered02()
-		{
-			OrderedSlopTest3(1, new int[]{0, 1});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrdered03()
-		{
-			OrderedSlopTest3(2, new int[]{0, 1, 2});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrdered04()
-		{
-			OrderedSlopTest3(3, new int[]{0, 1, 2, 3});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrdered05()
-		{
-			OrderedSlopTest3(4, new int[]{0, 1, 2, 3});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual01()
-		{
-			OrderedSlopTest3Equal(0, new int[]{});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual02()
-		{
-			OrderedSlopTest3Equal(1, new int[]{1});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual03()
-		{
-			OrderedSlopTest3Equal(2, new int[]{1});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual04()
-		{
-			OrderedSlopTest3Equal(3, new int[]{1, 3});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual11()
-		{
-			OrderedSlopTest1Equal(0, new int[]{4});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual12()
-		{
-			OrderedSlopTest1Equal(0, new int[]{4});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual13()
-		{
-			OrderedSlopTest1Equal(1, new int[]{4, 5, 6});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual14()
-		{
-			OrderedSlopTest1Equal(2, new int[]{4, 5, 6, 7});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedEqual15()
-		{
-			OrderedSlopTest1Equal(3, new int[]{4, 5, 6, 7});
-		}
-		
-		[Test]
-		public virtual void  TestSpanNearOrderedOverlap()
-		{
-			bool ordered = true;
-			int slop = 1;
-			SpanNearQuery snq = new SpanNearQuery(new SpanQuery[]{MakeSpanTermQuery("t1"), MakeSpanTermQuery("t2"), MakeSpanTermQuery("t3")}, slop, ordered);
-			Spans spans = snq.GetSpans(searcher.GetIndexReader());
-			
-			Assert.IsTrue(spans.Next(), "first range");
-			Assert.AreEqual(11, spans.Doc(), "first doc");
-			Assert.AreEqual(0, spans.Start(), "first start");
-			Assert.AreEqual(4, spans.End(), "first end");
-			
-			Assert.IsTrue(spans.Next(), "second range");
-			Assert.AreEqual(11, spans.Doc(), "second doc");
-			Assert.AreEqual(2, spans.Start(), "second start");
-			Assert.AreEqual(6, spans.End(), "second end");
-			
-			Assert.IsFalse(spans.Next(), "third range");
-		}
-		
-		
-		private Spans OrSpans(System.String[] terms)
-		{
-			SpanQuery[] sqa = new SpanQuery[terms.Length];
-			for (int i = 0; i < terms.Length; i++)
-			{
-				sqa[i] = MakeSpanTermQuery(terms[i]);
-			}
-			return (new SpanOrQuery(sqa)).GetSpans(searcher.GetIndexReader());
-		}
-		
-		private void  TstNextSpans(Spans spans, int doc, int start, int end)
-		{
-			Assert.IsTrue(spans.Next(), "next");
-			Assert.AreEqual(doc, spans.Doc(), "doc");
-			Assert.AreEqual(start, spans.Start(), "start");
-			Assert.AreEqual(end, spans.End(), "end");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrEmpty()
-		{
-			Spans spans = OrSpans(new System.String[0]);
-			Assert.IsFalse(spans.Next(), "empty next");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrSingle()
-		{
-			Spans spans = OrSpans(new System.String[]{"w5"});
-			TstNextSpans(spans, 0, 4, 5);
-			Assert.IsFalse(spans.Next(), "final next");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrDouble()
-		{
-			Spans spans = OrSpans(new System.String[]{"w5", "yy"});
-			TstNextSpans(spans, 0, 4, 5);
-			TstNextSpans(spans, 2, 3, 4);
-			TstNextSpans(spans, 3, 4, 5);
-			TstNextSpans(spans, 7, 3, 4);
-			Assert.IsFalse(spans.Next(), "final next");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrDoubleSkip()
-		{
-			Spans spans = OrSpans(new System.String[]{"w5", "yy"});
-			Assert.IsTrue(spans.SkipTo(3), "initial skipTo");
-			Assert.AreEqual(3, spans.Doc(), "doc");
-			Assert.AreEqual(4, spans.Start(), "start");
-			Assert.AreEqual(5, spans.End(), "end");
-			TstNextSpans(spans, 7, 3, 4);
-			Assert.IsFalse(spans.Next(), "final next");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrUnused()
-		{
-			Spans spans = OrSpans(new System.String[]{"w5", "unusedTerm", "yy"});
-			TstNextSpans(spans, 0, 4, 5);
-			TstNextSpans(spans, 2, 3, 4);
-			TstNextSpans(spans, 3, 4, 5);
-			TstNextSpans(spans, 7, 3, 4);
-			Assert.IsFalse(spans.Next(), "final next");
-		}
-		
-		[Test]
-		public virtual void  TestSpanOrTripleSameDoc()
-		{
-			Spans spans = OrSpans(new System.String[]{"t1", "t2", "t3"});
-			TstNextSpans(spans, 11, 0, 1);
-			TstNextSpans(spans, 11, 1, 2);
-			TstNextSpans(spans, 11, 2, 3);
-			TstNextSpans(spans, 11, 3, 4);
-			TstNextSpans(spans, 11, 4, 5);
-			TstNextSpans(spans, 11, 5, 6);
-			Assert.IsFalse(spans.Next(), "final next");
-		}
-	}
+    [TestFixture]
+    public class TestSpans : LuceneTestCase
+    {
+        private IndexSearcher searcher;
+
+        public const System.String field = "field";
+
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+            RAMDirectory directory = new RAMDirectory();
+            IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
+            for (int i = 0; i < docFields.Length; i++)
+            {
+                Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
+                doc.Add(new Field(field, docFields[i], Field.Store.YES, Field.Index.ANALYZED));
+                writer.AddDocument(doc);
+            }
+            writer.Close();
+            searcher = new IndexSearcher(directory);
+            //System.out.println("set up " + getName());
+        }
+
+        private System.String[] docFields = new System.String[] { "w1 w2 w3 w4 w5", "w1 w3 w2 w3", "w1 xx w2 yy w3", "w1 w3 xx w2 yy w3", "u2 u2 u1", "u2 xx u2 u1", "u2 u2 xx u1", "u2 xx u2 yy u1", "u2 xx u1 u2", "u2 u1 xx u2", "u1 u2 xx u2", "t1 t2 t1 t3 t2 t3" };
+
+        public virtual SpanTermQuery MakeSpanTermQuery(System.String text)
+        {
+            return new SpanTermQuery(new Term(field, text));
+        }
+
+        private void CheckHits(Query query, int[] results)
+        {
+            Lucene.Net.Search.CheckHits.CheckHits_Renamed(query, field, searcher, results);
+        }
+
+        private void OrderedSlopTest3SQ(SpanQuery q1, SpanQuery q2, SpanQuery q3, int slop, int[] expectedDocs)
+        {
+            bool ordered = true;
+            SpanNearQuery snq = new SpanNearQuery(new SpanQuery[] { q1, q2, q3 }, slop, ordered);
+            CheckHits(snq, expectedDocs);
+        }
+
+        public virtual void OrderedSlopTest3(int slop, int[] expectedDocs)
+        {
+            OrderedSlopTest3SQ(MakeSpanTermQuery("w1"), MakeSpanTermQuery("w2"), MakeSpanTermQuery("w3"), slop, expectedDocs);
+        }
+
+        public virtual void OrderedSlopTest3Equal(int slop, int[] expectedDocs)
+        {
+            OrderedSlopTest3SQ(MakeSpanTermQuery("w1"), MakeSpanTermQuery("w3"), MakeSpanTermQuery("w3"), slop, expectedDocs);
+        }
+
+        public virtual void OrderedSlopTest1Equal(int slop, int[] expectedDocs)
+        {
+            OrderedSlopTest3SQ(MakeSpanTermQuery("u2"), MakeSpanTermQuery("u2"), MakeSpanTermQuery("u1"), slop, expectedDocs);
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrdered01()
+        {
+            OrderedSlopTest3(0, new int[] { 0 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrdered02()
+        {
+            OrderedSlopTest3(1, new int[] { 0, 1 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrdered03()
+        {
+            OrderedSlopTest3(2, new int[] { 0, 1, 2 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrdered04()
+        {
+            OrderedSlopTest3(3, new int[] { 0, 1, 2, 3 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrdered05()
+        {
+            OrderedSlopTest3(4, new int[] { 0, 1, 2, 3 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual01()
+        {
+            OrderedSlopTest3Equal(0, new int[] { });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual02()
+        {
+            OrderedSlopTest3Equal(1, new int[] { 1 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual03()
+        {
+            OrderedSlopTest3Equal(2, new int[] { 1 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual04()
+        {
+            OrderedSlopTest3Equal(3, new int[] { 1, 3 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual11()
+        {
+            OrderedSlopTest1Equal(0, new int[] { 4 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual12()
+        {
+            OrderedSlopTest1Equal(0, new int[] { 4 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual13()
+        {
+            OrderedSlopTest1Equal(1, new int[] { 4, 5, 6 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual14()
+        {
+            OrderedSlopTest1Equal(2, new int[] { 4, 5, 6, 7 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedEqual15()
+        {
+            OrderedSlopTest1Equal(3, new int[] { 4, 5, 6, 7 });
+        }
+
+        [Test]
+        public virtual void TestSpanNearOrderedOverlap()
+        {
+            bool ordered = true;
+            int slop = 1;
+            SpanNearQuery snq = new SpanNearQuery(new SpanQuery[] { MakeSpanTermQuery("t1"), MakeSpanTermQuery("t2"), MakeSpanTermQuery("t3") }, slop, ordered);
+            Spans spans = snq.GetSpans(searcher.GetIndexReader());
+
+            Assert.IsTrue(spans.Next(), "first range");
+            Assert.AreEqual(11, spans.Doc(), "first doc");
+            Assert.AreEqual(0, spans.Start(), "first start");
+            Assert.AreEqual(4, spans.End(), "first end");
+
+            Assert.IsTrue(spans.Next(), "second range");
+            Assert.AreEqual(11, spans.Doc(), "second doc");
+            Assert.AreEqual(2, spans.Start(), "second start");
+            Assert.AreEqual(6, spans.End(), "second end");
+
+            Assert.IsFalse(spans.Next(), "third range");
+        }
+
+        [Test]
+        public void TestSpanNearUnOrdered()
+        {
+
+            //See http://www.gossamer-threads.com/lists/lucene/java-dev/52270 for discussion about this test
+            SpanNearQuery snq;
+            snq = new SpanNearQuery(
+                                      new SpanQuery[] {
+                                MakeSpanTermQuery("u1"),
+                                MakeSpanTermQuery("u2") },
+                                      0,
+                                      false);
+            Spans spans = snq.GetSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(4, spans.Doc(), "doc");
+            Assert.AreEqual(1, spans.Start(), "start");
+            Assert.AreEqual(3, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(5, spans.Doc(), "doc");
+            Assert.AreEqual(2, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(8, spans.Doc(), "doc");
+            Assert.AreEqual(2, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(9, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(2, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(10, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(2, spans.End(), "end");
+            Assert.IsTrue(spans.Next() == false, "Has next and it shouldn't: " + spans.Doc());
+
+            SpanNearQuery u1u2 = new SpanNearQuery(new SpanQuery[]{MakeSpanTermQuery("u1"),
+                                MakeSpanTermQuery("u2")}, 0, false);
+            snq = new SpanNearQuery(
+                                      new SpanQuery[] {
+                                u1u2,
+                                MakeSpanTermQuery("u2")
+                              },
+                                      1,
+                                      false);
+            spans = snq.GetSpans(searcher.GetIndexReader());
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(4, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(3, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            //unordered spans can be subsets
+            Assert.AreEqual(4, spans.Doc(), "doc");
+            Assert.AreEqual(1, spans.Start(), "start");
+            Assert.AreEqual(3, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(5, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(5, spans.Doc(), "doc");
+            Assert.AreEqual(2, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(8, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(8, spans.Doc(), "doc");
+            Assert.AreEqual(2, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(9, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(2, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(9, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(4, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next(), "Does not have next and it should");
+            Assert.AreEqual(10, spans.Doc(), "doc");
+            Assert.AreEqual(0, spans.Start(), "start");
+            Assert.AreEqual(2, spans.End(), "end");
+
+            Assert.IsTrue(spans.Next() == false, "Has next and it shouldn't");
+        }
+
+        private Spans OrSpans(System.String[] terms)
+        {
+            SpanQuery[] sqa = new SpanQuery[terms.Length];
+            for (int i = 0; i < terms.Length; i++)
+            {
+                sqa[i] = MakeSpanTermQuery(terms[i]);
+            }
+            return (new SpanOrQuery(sqa)).GetSpans(searcher.GetIndexReader());
+        }
+
+        private void TstNextSpans(Spans spans, int doc, int start, int end)
+        {
+            Assert.IsTrue(spans.Next(), "next");
+            Assert.AreEqual(doc, spans.Doc(), "doc");
+            Assert.AreEqual(start, spans.Start(), "start");
+            Assert.AreEqual(end, spans.End(), "end");
+        }
+
+        [Test]
+        public virtual void TestSpanOrEmpty()
+        {
+            Spans spans = OrSpans(new System.String[0]);
+            Assert.IsFalse(spans.Next(), "empty next");
+        }
+
+        [Test]
+        public virtual void TestSpanOrSingle()
+        {
+            Spans spans = OrSpans(new System.String[] { "w5" });
+            TstNextSpans(spans, 0, 4, 5);
+            Assert.IsFalse(spans.Next(), "final next");
+        }
+
+        [Test]
+        public virtual void TestSpanOrDouble()
+        {
+            Spans spans = OrSpans(new System.String[] { "w5", "yy" });
+            TstNextSpans(spans, 0, 4, 5);
+            TstNextSpans(spans, 2, 3, 4);
+            TstNextSpans(spans, 3, 4, 5);
+            TstNextSpans(spans, 7, 3, 4);
+            Assert.IsFalse(spans.Next(), "final next");
+        }
+
+        [Test]
+        public virtual void TestSpanOrDoubleSkip()
+        {
+            Spans spans = OrSpans(new System.String[] { "w5", "yy" });
+            Assert.IsTrue(spans.SkipTo(3), "initial skipTo");
+            Assert.AreEqual(3, spans.Doc(), "doc");
+            Assert.AreEqual(4, spans.Start(), "start");
+            Assert.AreEqual(5, spans.End(), "end");
+            TstNextSpans(spans, 7, 3, 4);
+            Assert.IsFalse(spans.Next(), "final next");
+        }
+
+        [Test]
+        public virtual void TestSpanOrUnused()
+        {
+            Spans spans = OrSpans(new System.String[] { "w5", "unusedTerm", "yy" });
+            TstNextSpans(spans, 0, 4, 5);
+            TstNextSpans(spans, 2, 3, 4);
+            TstNextSpans(spans, 3, 4, 5);
+            TstNextSpans(spans, 7, 3, 4);
+            Assert.IsFalse(spans.Next(), "final next");
+        }
+
+        [Test]
+        public virtual void TestSpanOrTripleSameDoc()
+        {
+            Spans spans = OrSpans(new System.String[] { "t1", "t2", "t3" });
+            TstNextSpans(spans, 11, 0, 1);
+            TstNextSpans(spans, 11, 1, 2);
+            TstNextSpans(spans, 11, 2, 3);
+            TstNextSpans(spans, 11, 3, 4);
+            TstNextSpans(spans, 11, 4, 5);
+            TstNextSpans(spans, 11, 5, 6);
+            Assert.IsFalse(spans.Next(), "final next");
+        }
+
+        class AnonymousSimilarity : DefaultSimilarity
+        {
+            override public float SloppyFreq(int distance)
+            {
+                return 0.0f;
+            }
+        }
+
+        class AnonymousSpanNearQuery : SpanNearQuery
+        {
+            private Similarity sim;
+
+            public AnonymousSpanNearQuery(SpanQuery[] clauses, int slop, bool inOrder, Similarity sim)
+                : base(clauses, slop, inOrder)
+            {
+                this.sim = sim;
+            }
+
+            override public Similarity GetSimilarity(Searcher s)
+            {
+                return sim;
+            }
+        }
+
+        [Test]
+        public void TestSpanScorerZeroSloppyFreq()
+        {
+            bool ordered = true;
+            int slop = 1;
+
+            Similarity sim = new AnonymousSimilarity();
+
+            SpanNearQuery snq = new AnonymousSpanNearQuery(new SpanQuery[] { MakeSpanTermQuery("t1"), MakeSpanTermQuery("t2") }, slop, ordered, sim);
+
+            Scorer spanScorer = snq.Weight(searcher).Scorer(searcher.GetIndexReader());
+
+            Assert.IsTrue(spanScorer.Next(), "first doc");
+            Assert.AreEqual(spanScorer.Doc(), 11, "first doc number");
+            float score = spanScorer.Score();
+            Assert.IsTrue(score == 0.0f, "first doc score should be zero, " + score);
+            Assert.IsTrue(!spanScorer.Next(), "no second doc");
+        }
+
+
+
+        // LUCENE-1404
+        private void AddDoc(IndexWriter writer, String id, String text)
+        {
+            Document doc = new Document();
+            doc.Add(new Field("id", id, Field.Store.YES, Field.Index.UN_TOKENIZED));
+            doc.Add(new Field("text", text, Field.Store.YES, Field.Index.TOKENIZED));
+            writer.AddDocument(doc);
+        }
+
+        // LUCENE-1404
+        private int HitCount(Searcher searcher, String word)
+        {
+            return searcher.Search(new TermQuery(new Term("text", word)), 10).totalHits;
+        }
+
+        // LUCENE-1404
+        private SpanQuery CreateSpan(String value)
+        {
+            return new SpanTermQuery(new Term("text", value));
+        }
+
+        // LUCENE-1404
+        private SpanQuery CreateSpan(int slop, bool ordered, SpanQuery[] clauses)
+        {
+            return new SpanNearQuery(clauses, slop, ordered);
+        }
+
+        // LUCENE-1404
+        private SpanQuery CreateSpan(int slop, bool ordered, String term1, String term2)
+        {
+            return CreateSpan(slop, ordered, new SpanQuery[] { CreateSpan(term1), CreateSpan(term2) });
+        }
+
+        // LUCENE-1404
+        [Test]
+        public void TestNPESpanQuery()
+        {
+            Directory dir = new MockRAMDirectory();
+            IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(new String[0]), IndexWriter.MaxFieldLength.LIMITED);
+
+            // Add documents
+            AddDoc(writer, "1", "the big dogs went running to the market");
+            AddDoc(writer, "2", "the cat chased the mouse, then the cat ate the mouse quickly");
+
+            // Commit
+            writer.Close();
+
+            // Get searcher
+            IndexReader reader = IndexReader.Open(dir);
+            IndexSearcher searcher = new IndexSearcher(reader);
+
+            // Control (make sure docs indexed)
+            Assert.AreEqual(2, HitCount(searcher, "the"));
+            Assert.AreEqual(1, HitCount(searcher, "cat"));
+            Assert.AreEqual(1, HitCount(searcher, "dogs"));
+            Assert.AreEqual(0, HitCount(searcher, "rabbit"));
+
+            // This throws exception (it shouldn't)
+            Assert.AreEqual(1,
+                         searcher.Search(CreateSpan(0, true,
+                                                    new SpanQuery[] {CreateSpan(4, false, "chased", "cat"),
+                                                             CreateSpan("ate")}), 10).totalHits);
+            reader.Close();
+            dir.Close();
+        }
+    }
 }
\ No newline at end of file

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestSpansAdvanced.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced.cs Wed Jul 29 18:04:12 2009
@@ -62,7 +62,7 @@
 			
 			// create test index
 			mDirectory = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(mDirectory, new StandardAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(mDirectory, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			AddDocument(writer, "1", "I think it should work.");
 			AddDocument(writer, "2", "I think it should work.");
 			AddDocument(writer, "3", "I think it should work.");
@@ -94,8 +94,8 @@
 		{
 			
 			Lucene.Net.Documents.Document document = new Lucene.Net.Documents.Document();
-			document.Add(new Field(FIELD_ID, id, Field.Store.YES, Field.Index.UN_TOKENIZED));
-			document.Add(new Field(FIELD_TEXT, text, Field.Store.YES, Field.Index.TOKENIZED));
+			document.Add(new Field(FIELD_ID, id, Field.Store.YES, Field.Index.NOT_ANALYZED));
+			document.Add(new Field(FIELD_TEXT, text, Field.Store.YES, Field.Index.ANALYZED));
 			writer.AddDocument(document);
 		}
 		

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced2.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/Spans/TestSpansAdvanced2.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced2.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/Spans/TestSpansAdvanced2.cs Wed Jul 29 18:04:12 2009
@@ -47,10 +47,10 @@
 			base.SetUp();
 			
 			// create test index
-			IndexWriter writer = new IndexWriter(mDirectory, new StandardAnalyzer(), false);
+			IndexWriter writer = new IndexWriter(mDirectory, new StandardAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED);
 			AddDocument(writer, "A", "Should we, could we, would we?");
-			AddDocument(writer, "B", "it should.  Should it?");
-			AddDocument(writer, "C", "it shouldn't.");
+			AddDocument(writer, "B", "It should.  Should it?");
+			AddDocument(writer, "C", "It shouldn't.");
 			AddDocument(writer, "D", "Should we, should we, should we.");
 			writer.Close();
 			

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestBoolean2.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestBoolean2.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestBoolean2.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestBoolean2.cs Wed Jul 29 18:04:12 2009
@@ -73,11 +73,11 @@
 		{
 			base.SetUp();
 			RAMDirectory directory = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			for (int i = 0; i < docFields.Length; i++)
 			{
 				Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-				doc.Add(new Field(field, docFields[i], Field.Store.NO, Field.Index.TOKENIZED));
+				doc.Add(new Field(field, docFields[i], Field.Store.NO, Field.Index.ANALYZED));
 				writer.AddDocument(doc);
 			}
 			writer.Close();
@@ -100,11 +100,11 @@
 			{
 				Query query1 = MakeQuery(queryText);
 				BooleanQuery.SetAllowDocsOutOfOrder(true);
-				Hits hits1 = searcher.Search(query1);
+				ScoreDoc[] hits1 = searcher.Search(query1, null, 1000).scoreDocs;
 				
 				Query query2 = MakeQuery(queryText); // there should be no need to parse again...
 				BooleanQuery.SetAllowDocsOutOfOrder(false);
-				Hits hits2 = searcher.Search(query2);
+                ScoreDoc[] hits2 = searcher.Search(query2, null, 1000).scoreDocs;
 				
 				CheckHits.CheckHitsQuery(query2, hits1, hits2, expDocNrs);
 			}
@@ -221,16 +221,12 @@
 					BooleanQuery.SetAllowDocsOutOfOrder(false);
 					
 					QueryUtils.Check(q1, searcher);
-					
-					Hits hits1 = searcher.Search(q1, sort);
-					if (hits1.Length() > 0)
-						hits1.Id(hits1.Length() - 1);
+
+                    ScoreDoc[] hits1 = searcher.Search(q1, null, 1000, sort).scoreDocs;
 					
 					BooleanQuery.SetAllowDocsOutOfOrder(true);
-					Hits hits2 = searcher.Search(q1, sort);
-					if (hits2.Length() > 0)
-						hits2.Id(hits1.Length() - 1);
-					tot += hits2.Length();
+                    ScoreDoc[] hits2 = searcher.Search(q1, null, 1000, sort).scoreDocs;
+					tot += hits2.Length;
 					CheckHits.CheckEqual(q1, hits1, hits2);
 				}
 			}

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanMinShouldMatch.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestBooleanMinShouldMatch.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanMinShouldMatch.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanMinShouldMatch.cs Wed Jul 29 18:04:12 2009
@@ -89,16 +89,16 @@
 			System.String[] data = new System.String[]{"A 1 2 3 4 5 6", "Z       4 5 6", null, "B   2   4 5 6", "Y     3   5 6", null, "C     3     6", "X       4 5 6"};
 			
 			index = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(index, new WhitespaceAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(index, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			
 			for (int i = 0; i < data.Length; i++)
 			{
 				Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-				doc.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES, Field.Index.UN_TOKENIZED)); //Field.Keyword("id",String.valueOf(i)));
-				doc.Add(new Field("all", "all", Field.Store.YES, Field.Index.UN_TOKENIZED)); //Field.Keyword("all","all"));
+				doc.Add(new Field("id", System.Convert.ToString(i), Field.Store.YES, Field.Index.NOT_ANALYZED)); //Field.Keyword("id",String.valueOf(i)));
+				doc.Add(new Field("all", "all", Field.Store.YES, Field.Index.NOT_ANALYZED)); //Field.Keyword("all","all"));
 				if (null != data[i])
 				{
-					doc.Add(new Field("data", data[i], Field.Store.YES, Field.Index.TOKENIZED)); //Field.Text("data",data[i]));
+					doc.Add(new Field("data", data[i], Field.Store.YES, Field.Index.ANALYZED)); //Field.Text("data",data[i]));
 				}
 				writer.AddDocument(doc);
 			}
@@ -114,12 +114,12 @@
 		
 		public virtual void  VerifyNrHits(Query q, int expected)
 		{
-			Hits h = s.Search(q);
-			if (expected != h.Length())
+			ScoreDoc[] h = s.Search(q, null, 1000).scoreDocs;
+			if (expected != h.Length)
 			{
-				PrintHits("TestBooleanMinShouldMatch", h);  // PrintHits(TestCase.GetName(), h);    // {{Aroush-1.9}} 'GetName()' gives us the name of the test in JUnit, how is it done in NUnit?
+				PrintHits("TestBooleanMinShouldMatch", h, s);  // PrintHits(TestCase.GetName(), h);    // {{Aroush-1.9}} 'GetName()' gives us the name of the test in JUnit, how is it done in NUnit?
 			}
-			Assert.AreEqual(expected, h.Length(), "result count");
+			Assert.AreEqual(expected, h.Length, "result count");
 			QueryUtils.Check(q, s);
 		}
 		
@@ -342,8 +342,21 @@
 			
 			VerifyNrHits(q, 0);
 		}
-		
-		[Test]
+
+        [Test]
+        public virtual void TestNoOptionalButMin2()
+        {
+
+            /* one required, no optional */
+            BooleanQuery q = new BooleanQuery();
+            q.Add(new TermQuery(new Term("all", "all")), BooleanClause.Occur.MUST); //true,  false);
+
+            q.SetMinimumNumberShouldMatch(1); // 1 of 0 optional 
+
+            VerifyNrHits(q, 0);
+        }
+
+        [Test]
 		public virtual void  TestRandomQueries()
 		{
 			System.Random rnd = new System.Random((System.Int32) 0);
@@ -416,15 +429,15 @@
 		
 		
 		
-		protected internal virtual void  PrintHits(System.String test, Hits h)
+		protected internal virtual void  PrintHits(System.String test, ScoreDoc[] h, Searcher searcher)
 		{
 			
 			System.Console.Error.WriteLine("------- " + test + " -------");
 			
-			for (int i = 0; i < h.Length(); i++)
+			for (int i = 0; i < h.Length; i++)
 			{
-				Lucene.Net.Documents.Document d = h.Doc(i);
-				float score = h.Score(i);
+				Lucene.Net.Documents.Document d = searcher.Doc(h[i].doc);
+                float score = h[i].score;
 				System.Console.Error.WriteLine("#" + i + ": {0.000000}" + score + " - " + d.Get("id") + " - " + d.Get("data"));
 			}
 		}

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanOr.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestBooleanOr.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanOr.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanOr.cs Wed Jul 29 18:04:12 2009
@@ -33,8 +33,6 @@
 	/// <summary> Created on 2005. 2. 9.
 	/// <br>Adapted to Lucene testcase by Paul Elschot.
 	/// </summary>
-	/// <author>  appler@gmail.com
-	/// </author>
 	[TestFixture]
 	public class TestBooleanOr : LuceneTestCase
 	{
@@ -52,8 +50,8 @@
 		private int Search(Query q)
 		{
 			QueryUtils.Check(q, searcher);
-			return searcher.Search(q).Length();
-		}
+            return searcher.Search(q, null, 1000).totalHits;
+        }
 		
 		[Test]
 		public virtual void  TestElements()
@@ -150,12 +148,12 @@
 			RAMDirectory rd = new RAMDirectory();
 			
 			//
-			IndexWriter writer = new IndexWriter(rd, new StandardAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(rd, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			
 			//
 			Lucene.Net.Documents.Document d = new Lucene.Net.Documents.Document();
-			d.Add(new Field(FIELD_T, "Optimize not deleting all files", Field.Store.YES, Field.Index.TOKENIZED));
-			d.Add(new Field(FIELD_C, "Deleted When I run an optimize in our production environment.", Field.Store.YES, Field.Index.TOKENIZED));
+			d.Add(new Field(FIELD_T, "Optimize not deleting all files", Field.Store.YES, Field.Index.ANALYZED));
+			d.Add(new Field(FIELD_C, "Deleted When I run an optimize in our production environment.", Field.Store.YES, Field.Index.ANALYZED));
 			
 			//
 			writer.AddDocument(d);

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanPrefixQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestBooleanPrefixQuery.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanPrefixQuery.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanPrefixQuery.cs Wed Jul 29 18:04:12 2009
@@ -65,11 +65,11 @@
 			Query rw2 = null;
 			try
 			{
-				IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
+				IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 				for (int i = 0; i < categories.Length; i++)
 				{
 					Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-					doc.Add(new Field("category", categories[i], Field.Store.YES, Field.Index.UN_TOKENIZED));
+					doc.Add(new Field("category", categories[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
 					writer.AddDocument(doc);
 				}
 				writer.Close();

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanScorer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestBooleanScorer.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanScorer.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestBooleanScorer.cs Wed Jul 29 18:04:12 2009
@@ -52,26 +52,26 @@
 			
 			try
 			{
-				IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true);
+				IndexWriter writer = new IndexWriter(directory, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 				for (int i = 0; i < values.Length; i++)
 				{
 					Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
-					doc.Add(new Field(FIELD, values[i], Field.Store.YES, Field.Index.UN_TOKENIZED));
+					doc.Add(new Field(FIELD, values[i], Field.Store.YES, Field.Index.NOT_ANALYZED));
 					writer.AddDocument(doc);
 				}
 				writer.Close();
 				
-				BooleanQuery booleanQuery1 = new BooleanQuery();
-				booleanQuery1.Add(new TermQuery(new Term(FIELD, "1")), BooleanClause.Occur.SHOULD);
-				booleanQuery1.Add(new TermQuery(new Term(FIELD, "2")), BooleanClause.Occur.SHOULD);
+				BooleanQuery boolQuery1 = new BooleanQuery();
+				boolQuery1.Add(new TermQuery(new Term(FIELD, "1")), BooleanClause.Occur.SHOULD);
+				boolQuery1.Add(new TermQuery(new Term(FIELD, "2")), BooleanClause.Occur.SHOULD);
 				
 				BooleanQuery query = new BooleanQuery();
-				query.Add(booleanQuery1, BooleanClause.Occur.MUST);
+				query.Add(boolQuery1, BooleanClause.Occur.MUST);
 				query.Add(new TermQuery(new Term(FIELD, "9")), BooleanClause.Occur.MUST_NOT);
 				
 				IndexSearcher indexSearcher = new IndexSearcher(directory);
-				Hits hits = indexSearcher.Search(query);
-				Assert.AreEqual(2, hits.Length(), "Number of matched documents");
+				ScoreDoc[] hits = indexSearcher.Search(query, null, 1000).scoreDocs;
+				Assert.AreEqual(2, hits.Length, "Number of matched documents");
 			}
 			catch (System.IO.IOException e)
 			{

Modified: incubator/lucene.net/trunk/C#/src/Test/Search/TestCachingWrapperFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/C%23/src/Test/Search/TestCachingWrapperFilter.cs?rev=798995&r1=798994&r2=798995&view=diff
==============================================================================
--- incubator/lucene.net/trunk/C#/src/Test/Search/TestCachingWrapperFilter.cs (original)
+++ incubator/lucene.net/trunk/C#/src/Test/Search/TestCachingWrapperFilter.cs Wed Jul 29 18:04:12 2009
@@ -35,7 +35,7 @@
 		public virtual void  TestCachingWorks()
 		{
 			Directory dir = new RAMDirectory();
-			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true);
+			IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED);
 			writer.Close();
 			
 			IndexReader reader = IndexReader.Open(dir);
@@ -44,12 +44,12 @@
 			CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
 			
 			// first time, nested filter is called
-			cacher.Bits(reader);
+			cacher.GetDocIdSet(reader);
 			Assert.IsTrue(filter.WasCalled(), "first time");
 			
 			// second time, nested filter should not be called
 			filter.Clear();
-			cacher.Bits(reader);
+            cacher.GetDocIdSet(reader);
 			Assert.IsFalse(filter.WasCalled(), "second time");
 			
 			reader.Close();