You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by sy...@apache.org on 2016/10/02 10:16:57 UTC
[26/49] lucenenet git commit: Ported Core.TestSearch
Ported Core.TestSearch
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/2c3dbc63
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/2c3dbc63
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/2c3dbc63
Branch: refs/heads/master
Commit: 2c3dbc639d30c39807ffdcbf0edc1689bd64b19f
Parents: e9e4425
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Sun Sep 11 03:09:02 2016 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Sun Sep 11 04:19:27 2016 +0700
----------------------------------------------------------------------
src/Lucene.Net.Tests/Lucene.Net.Tests.csproj | 1 +
src/Lucene.Net.Tests/core/TestSearch.cs | 369 +++++++++++-----------
2 files changed, 184 insertions(+), 186 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/2c3dbc63/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj b/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
index 31b2666..289905b 100644
--- a/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
+++ b/src/Lucene.Net.Tests/Lucene.Net.Tests.csproj
@@ -432,6 +432,7 @@
<Compile Include="core\TestMergeSchedulerExternal.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="core\TestSearch.cs" />
<Compile Include="core\Util\Automaton\TestBasicOperations.cs">
<SubType>Code</SubType>
</Compile>
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/2c3dbc63/src/Lucene.Net.Tests/core/TestSearch.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests/core/TestSearch.cs b/src/Lucene.Net.Tests/core/TestSearch.cs
index 236bd7d..d6ab030 100644
--- a/src/Lucene.Net.Tests/core/TestSearch.cs
+++ b/src/Lucene.Net.Tests/core/TestSearch.cs
@@ -1,12 +1,16 @@
+using Lucene.Net.Analysis;
+using Lucene.Net.Documents;
+using Lucene.Net.Index;
+using Lucene.Net.Search;
+using Lucene.Net.Util;
+using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.IO;
-using NUnit.Framework;
-namespace org.apache.lucene
+namespace Lucene.Net
{
-
- /*
+ /*
* 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.
@@ -23,186 +27,179 @@ namespace org.apache.lucene
* limitations under the License.
*/
-
- using LuceneTestCase = Lucene.Net.Util.LuceneTestCase;
-
- using Lucene.Net.Store;
- using Lucene.Net.Document;
- using Lucene.Net.Analysis;
- using Lucene.Net.Index;
- using Lucene.Net.Search;
-
- /// <summary>
- /// JUnit adaptation of an older test case SearchTest. </summary>
- public class TestSearch : LuceneTestCase
- {
-
- public virtual void TestNegativeQueryBoost()
- {
- Query q = new TermQuery(new Term("foo", "bar"));
- q.Boost = -42f;
- Assert.AreEqual(-42f, q.Boost, 0.0f);
-
- Directory directory = newDirectory();
- try
- {
- Analyzer analyzer = new MockAnalyzer(random());
- IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
-
- IndexWriter writer = new IndexWriter(directory, conf);
- try
- {
- Document d = new Document();
- d.add(newTextField("foo", "bar", Field.Store.YES));
- writer.addDocument(d);
- }
- finally
- {
- writer.close();
- }
-
- IndexReader reader = DirectoryReader.open(directory);
- try
- {
- IndexSearcher searcher = newSearcher(reader);
-
- ScoreDoc[] hits = searcher.search(q, null, 1000).scoreDocs;
- Assert.AreEqual(1, hits.Length);
- Assert.IsTrue("score is not negative: " + hits[0].score, hits[0].score < 0);
-
- Explanation explain = searcher.explain(q, hits[0].doc);
- Assert.AreEqual("score doesn't match explanation", hits[0].score, explain.Value, 0.001f);
- Assert.IsTrue("explain doesn't think doc is a match", explain.Match);
-
- }
- finally
- {
- reader.close();
- }
- }
- finally
- {
- directory.close();
- }
-
- }
-
- /// <summary>
- /// this test performs a number of searches. It also compares output
- /// of searches using multi-file index segments with single-file
- /// index segments.
- ///
- /// TODO: someone should check that the results of the searches are
- /// still correct by adding assert statements. Right now, the test
- /// passes if the results are the same between multi-file and
- /// single-file formats, even if the results are wrong.
- /// </summary>
- public virtual void TestSearch()
- {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw, true);
- DoTestSearch(random(), pw, false);
- pw.close();
- sw.close();
- string multiFileOutput = sw.ToString();
- //System.out.println(multiFileOutput);
-
- sw = new StringWriter();
- pw = new PrintWriter(sw, true);
- DoTestSearch(random(), pw, true);
- pw.close();
- sw.close();
- string singleFileOutput = sw.ToString();
-
- Assert.AreEqual(multiFileOutput, singleFileOutput);
- }
-
-
- private void DoTestSearch(Random random, PrintWriter @out, bool useCompoundFile)
- {
- Directory directory = newDirectory();
- Analyzer analyzer = new MockAnalyzer(random);
- IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
- MergePolicy mp = conf.MergePolicy;
- mp.NoCFSRatio = useCompoundFile ? 1.0 : 0.0;
- IndexWriter writer = new IndexWriter(directory, conf);
-
- string[] docs = new string[] {"a b c d e", "a b c d e a b c d e", "a b c d e f g h i j", "a c e", "e c a", "a c e a c e", "a c e a b c"};
- for (int j = 0; j < docs.Length; j++)
- {
- Document d = new Document();
- d.add(newTextField("contents", docs[j], Field.Store.YES));
- d.add(newStringField("id", "" + j, Field.Store.NO));
- writer.addDocument(d);
- }
- writer.close();
-
- IndexReader reader = DirectoryReader.open(directory);
- IndexSearcher searcher = newSearcher(reader);
-
- ScoreDoc[] hits = null;
-
- Sort sort = new Sort(SortField.FIELD_SCORE, new SortField("id", SortField.Type.INT));
-
- foreach (Query query in BuildQueries())
- {
- @out.println("Query: " + query.ToString("contents"));
- if (VERBOSE)
- {
- Console.WriteLine("TEST: query=" + query);
- }
-
- hits = searcher.search(query, null, 1000, sort).scoreDocs;
-
- @out.println(hits.Length + " total results");
- for (int i = 0 ; i < hits.Length && i < 10; i++)
- {
- Document d = searcher.doc(hits[i].doc);
- @out.println(i + " " + hits[i].score + " " + d.get("contents"));
- }
- }
- reader.close();
- directory.close();
- }
-
- private IList<Query> BuildQueries()
- {
- IList<Query> queries = new List<Query>();
-
- BooleanQuery booleanAB = new BooleanQuery();
- booleanAB.add(new TermQuery(new Term("contents", "a")), BooleanClause.Occur_e.SHOULD);
- booleanAB.add(new TermQuery(new Term("contents", "b")), BooleanClause.Occur_e.SHOULD);
- queries.Add(booleanAB);
-
- PhraseQuery phraseAB = new PhraseQuery();
- phraseAB.add(new Term("contents", "a"));
- phraseAB.add(new Term("contents", "b"));
- queries.Add(phraseAB);
-
- PhraseQuery phraseABC = new PhraseQuery();
- phraseABC.add(new Term("contents", "a"));
- phraseABC.add(new Term("contents", "b"));
- phraseABC.add(new Term("contents", "c"));
- queries.Add(phraseABC);
-
- BooleanQuery booleanAC = new BooleanQuery();
- booleanAC.add(new TermQuery(new Term("contents", "a")), BooleanClause.Occur_e.SHOULD);
- booleanAC.add(new TermQuery(new Term("contents", "c")), BooleanClause.Occur_e.SHOULD);
- queries.Add(booleanAC);
-
- PhraseQuery phraseAC = new PhraseQuery();
- phraseAC.add(new Term("contents", "a"));
- phraseAC.add(new Term("contents", "c"));
- queries.Add(phraseAC);
-
- PhraseQuery phraseACE = new PhraseQuery();
- phraseACE.add(new Term("contents", "a"));
- phraseACE.add(new Term("contents", "c"));
- phraseACE.add(new Term("contents", "e"));
- queries.Add(phraseACE);
-
- return queries;
- }
- }
-
+ /// <summary>
+ /// JUnit adaptation of an older test case SearchTest. </summary>
+ public class TestSearch_ : LuceneTestCase
+ {
+ [Test]
+ public virtual void TestNegativeQueryBoost()
+ {
+ Query q = new TermQuery(new Term("foo", "bar"));
+ q.Boost = -42f;
+ Assert.AreEqual(-42f, q.Boost, 0.0f);
+
+ Store.Directory directory = NewDirectory();
+ try
+ {
+ Analyzer analyzer = new MockAnalyzer(Random());
+ IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
+
+ IndexWriter writer = new IndexWriter(directory, conf);
+ try
+ {
+ Documents.Document d = new Documents.Document();
+ d.Add(NewTextField("foo", "bar", Field.Store.YES));
+ writer.AddDocument(d);
+ }
+ finally
+ {
+ writer.Dispose();
+ }
+
+ IndexReader reader = DirectoryReader.Open(directory);
+ try
+ {
+ IndexSearcher searcher = NewSearcher(reader);
+
+ ScoreDoc[] hits = searcher.Search(q, null, 1000).ScoreDocs;
+ Assert.AreEqual(1, hits.Length);
+ Assert.IsTrue(hits[0].Score < 0, "score is not negative: " + hits[0].Score);
+
+ Explanation explain = searcher.Explain(q, hits[0].Doc);
+ Assert.AreEqual(hits[0].Score, explain.Value, 0.001f, "score doesn't match explanation");
+ Assert.IsTrue(explain.IsMatch, "explain doesn't think doc is a match");
+
+ }
+ finally
+ {
+ reader.Dispose();
+ }
+ }
+ finally
+ {
+ directory.Dispose();
+ }
+
+ }
+
+ /// <summary>
+ /// this test performs a number of searches. It also compares output
+ /// of searches using multi-file index segments with single-file
+ /// index segments.
+ ///
+ /// TODO: someone should check that the results of the searches are
+ /// still correct by adding assert statements. Right now, the test
+ /// passes if the results are the same between multi-file and
+ /// single-file formats, even if the results are wrong.
+ /// </summary>
+ [Test]
+ public virtual void TestSearch()
+ {
+ StringWriter sw;
+ string multiFileOutput;
+ string singleFileOutput;
+ using (sw = new StringWriter())
+ {
+ DoTestSearch(Random(), sw, false);
+ multiFileOutput = sw.ToString();
+ }
+
+ //System.out.println(multiFileOutput);
+
+ using (sw = new StringWriter())
+ {
+ DoTestSearch(Random(), sw, true);
+ singleFileOutput = sw.ToString();
+ }
+
+ Assert.AreEqual(multiFileOutput, singleFileOutput);
+ }
+
+
+ private void DoTestSearch(Random random, StringWriter @out, bool useCompoundFile)
+ {
+ Store.Directory directory = NewDirectory();
+ Analyzer analyzer = new MockAnalyzer(random);
+ IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, analyzer);
+ MergePolicy mp = conf.MergePolicy;
+ mp.NoCFSRatio = useCompoundFile ? 1.0 : 0.0;
+ IndexWriter writer = new IndexWriter(directory, conf);
+
+ string[] docs = new string[] { "a b c d e", "a b c d e a b c d e", "a b c d e f g h i j", "a c e", "e c a", "a c e a c e", "a c e a b c" };
+ for (int j = 0; j < docs.Length; j++)
+ {
+ Documents.Document d = new Documents.Document();
+ d.Add(NewTextField("contents", docs[j], Field.Store.YES));
+ d.Add(NewStringField("id", "" + j, Field.Store.NO));
+ writer.AddDocument(d);
+ }
+ writer.Dispose();
+
+ IndexReader reader = DirectoryReader.Open(directory);
+ IndexSearcher searcher = NewSearcher(reader);
+
+ ScoreDoc[] hits = null;
+
+ Sort sort = new Sort(SortField.FIELD_SCORE, new SortField("id", SortField.Type_e.INT));
+
+ foreach (Query query in BuildQueries())
+ {
+ @out.WriteLine("Query: " + query.ToString("contents"));
+ if (VERBOSE)
+ {
+ Console.WriteLine("TEST: query=" + query);
+ }
+
+ hits = searcher.Search(query, null, 1000, sort).ScoreDocs;
+
+ @out.WriteLine(hits.Length + " total results");
+ for (int i = 0; i < hits.Length && i < 10; i++)
+ {
+ Documents.Document d = searcher.Doc(hits[i].Doc);
+ @out.WriteLine(i + " " + hits[i].Score + " " + d.Get("contents"));
+ }
+ }
+ reader.Dispose();
+ directory.Dispose();
+ }
+
+ private IList<Query> BuildQueries()
+ {
+ IList<Query> queries = new List<Query>();
+
+ BooleanQuery booleanAB = new BooleanQuery();
+ booleanAB.Add(new TermQuery(new Term("contents", "a")), BooleanClause.Occur.SHOULD);
+ booleanAB.Add(new TermQuery(new Term("contents", "b")), BooleanClause.Occur.SHOULD);
+ queries.Add(booleanAB);
+
+ PhraseQuery phraseAB = new PhraseQuery();
+ phraseAB.Add(new Term("contents", "a"));
+ phraseAB.Add(new Term("contents", "b"));
+ queries.Add(phraseAB);
+
+ PhraseQuery phraseABC = new PhraseQuery();
+ phraseABC.Add(new Term("contents", "a"));
+ phraseABC.Add(new Term("contents", "b"));
+ phraseABC.Add(new Term("contents", "c"));
+ queries.Add(phraseABC);
+
+ BooleanQuery booleanAC = new BooleanQuery();
+ booleanAC.Add(new TermQuery(new Term("contents", "a")), BooleanClause.Occur.SHOULD);
+ booleanAC.Add(new TermQuery(new Term("contents", "c")), BooleanClause.Occur.SHOULD);
+ queries.Add(booleanAC);
+
+ PhraseQuery phraseAC = new PhraseQuery();
+ phraseAC.Add(new Term("contents", "a"));
+ phraseAC.Add(new Term("contents", "c"));
+ queries.Add(phraseAC);
+
+ PhraseQuery phraseACE = new PhraseQuery();
+ phraseACE.Add(new Term("contents", "a"));
+ phraseACE.Add(new Term("contents", "c"));
+ phraseACE.Add(new Term("contents", "e"));
+ queries.Add(phraseACE);
+
+ return queries;
+ }
+ }
}
\ No newline at end of file