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 2015/08/12 19:52:04 UTC
[2/4] lucenenet git commit: Ported the ChainedFilterTest class.
Ported the ChainedFilterTest class.
Think I did the right thing with the GregorianCalendar usage...
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/7b4987f7
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/7b4987f7
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/7b4987f7
Branch: refs/heads/master
Commit: 7b4987f77e7395618c2fd62a0565d93aec82e5dc
Parents: 9611865
Author: Josh Sullivan <ja...@gmail.com>
Authored: Mon Aug 10 20:28:41 2015 -0400
Committer: Josh Sullivan <ja...@gmail.com>
Committed: Mon Aug 10 20:28:41 2015 -0400
----------------------------------------------------------------------
.../ChainedFilterTest.cs | 188 +++++++++++++++++++
.../Lucene.Net.Tests.Queries.csproj | 2 +
2 files changed, 190 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/7b4987f7/src/Lucene.Net.Tests.Queries/ChainedFilterTest.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Queries/ChainedFilterTest.cs b/src/Lucene.Net.Tests.Queries/ChainedFilterTest.cs
new file mode 100644
index 0000000..66be39a
--- /dev/null
+++ b/src/Lucene.Net.Tests.Queries/ChainedFilterTest.cs
@@ -0,0 +1,188 @@
+using System;
+using System.Globalization;
+using Lucene.Net.Documents;
+using Lucene.Net.Index;
+using Lucene.Net.Queries;
+using Lucene.Net.Search;
+using Lucene.Net.Store;
+using Lucene.Net.Util;
+using NUnit.Framework;
+
+namespace Lucene.Net.Tests.Queries
+{
+ public class ChainedFilterTest : LuceneTestCase
+ {
+ public const int Max = 500;
+
+ private Directory directory;
+ private IndexSearcher searcher;
+ private IndexReader reader;
+ private Query query;
+ // private DateFilter dateFilter; DateFilter was deprecated and removed
+ private TermRangeFilter dateFilter;
+ private QueryWrapperFilter bobFilter;
+ private QueryWrapperFilter sueFilter;
+
+ [SetUp]
+ public override void SetUp()
+ {
+ base.SetUp();
+ directory = NewDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(Random(), directory);
+ // we use the default Locale/TZ since LuceneTestCase randomizes it
+ var cal = new DateTime(1970, 1, 1, 0, 0, 0, (int)TestUtil.NextLong(Random(), 0, long.MaxValue), new GregorianCalendar());
+
+ for (int i = 0; i < Max; i++)
+ {
+ Document doc = new Document();
+ doc.Add(NewStringField("key", "" + (i + 1), Field.Store.YES));
+ doc.Add(NewStringField("owner", (i < Max / 2) ? "bob" : "sue", Field.Store.YES));
+ doc.Add(NewStringField("date", cal.ToString(CultureInfo.InvariantCulture), Field.Store.YES));
+ writer.AddDocument(doc);
+
+ cal = cal.AddDays(1);
+ }
+ reader = writer.Reader;
+ writer.Dispose();
+
+ searcher = NewSearcher(reader);
+
+ // query for everything to make life easier
+ BooleanQuery bq = new BooleanQuery();
+ bq.Add(new TermQuery(new Term("owner", "bob")), BooleanClause.Occur.SHOULD);
+ bq.Add(new TermQuery(new Term("owner", "sue")), BooleanClause.Occur.SHOULD);
+ query = bq;
+
+ // date filter matches everything too
+ //Date pastTheEnd = parseDate("2099 Jan 1");
+ // dateFilter = DateFilter.Before("date", pastTheEnd);
+ // just treat dates as strings and select the whole range for now...
+ dateFilter = TermRangeFilter.NewStringRange("date", "", "ZZZZ", true, true);
+
+ bobFilter = new QueryWrapperFilter(new TermQuery(new Term("owner", "bob")));
+ sueFilter = new QueryWrapperFilter(new TermQuery(new Term("owner", "sue")));
+ }
+
+ [TearDown]
+ public override void TearDown()
+ {
+ reader.Dispose();
+ directory.Dispose();
+ base.TearDown();
+ }
+
+ private ChainedFilter GetChainedFilter(Filter[] chain, int[] logic)
+ {
+ if (logic == null)
+ {
+ return new ChainedFilter(chain);
+ }
+ return new ChainedFilter(chain, logic);
+ }
+
+ private ChainedFilter GetChainedFilter(Filter[] chain, int logic)
+ {
+ return new ChainedFilter(chain, logic);
+ }
+
+
+ [Test]
+ public virtual void TestSingleFilter()
+ {
+ ChainedFilter chain = GetChainedFilter(new Filter[] { dateFilter }, null);
+
+ int numHits = searcher.Search(query, chain, 1000).TotalHits;
+ assertEquals(Max, numHits);
+
+ chain = new ChainedFilter(new Filter[] { bobFilter });
+ numHits = searcher.Search(query, chain, 1000).TotalHits;
+ assertEquals(Max / 2, numHits);
+
+ chain = GetChainedFilter(new Filter[] { bobFilter }, new[] { ChainedFilter.AND });
+ TopDocs hits = searcher.Search(query, chain, 1000);
+ numHits = hits.TotalHits;
+ assertEquals(Max / 2, numHits);
+ assertEquals("bob", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+
+ chain = GetChainedFilter(new Filter[] { bobFilter }, new[] { ChainedFilter.ANDNOT });
+ hits = searcher.Search(query, chain, 1000);
+ numHits = hits.TotalHits;
+ assertEquals(Max / 2, numHits);
+ assertEquals("sue", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+ }
+
+ [Test]
+ public virtual void TestOR()
+ {
+ ChainedFilter chain = GetChainedFilter(new Filter[] { sueFilter, bobFilter }, null);
+
+ int numHits = searcher.Search(query, chain, 1000).TotalHits;
+ assertEquals("OR matches all", Max, numHits);
+ }
+
+ [Test]
+ public virtual void TestAND()
+ {
+ ChainedFilter chain = GetChainedFilter(new Filter[] { dateFilter, bobFilter }, ChainedFilter.AND);
+
+ TopDocs hits = searcher.Search(query, chain, 1000);
+ assertEquals("AND matches just bob", Max / 2, hits.TotalHits);
+ assertEquals("bob", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+ }
+
+ [Test]
+ public virtual void TestXOR()
+ {
+ ChainedFilter chain = GetChainedFilter(new Filter[] { dateFilter, bobFilter }, ChainedFilter.XOR);
+
+ TopDocs hits = searcher.Search(query, chain, 1000);
+ assertEquals("XOR matches sue", Max / 2, hits.TotalHits);
+ assertEquals("sue", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+ }
+
+ [Test]
+ public virtual void TestANDNOT()
+ {
+ ChainedFilter chain = GetChainedFilter(new Filter[] { dateFilter, sueFilter }, new int[] { ChainedFilter.AND, ChainedFilter.ANDNOT });
+
+ TopDocs hits = searcher.Search(query, chain, 1000);
+ assertEquals("ANDNOT matches just bob", Max / 2, hits.TotalHits);
+ assertEquals("bob", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+
+ chain = GetChainedFilter(new Filter[] { bobFilter, bobFilter }, new int[] { ChainedFilter.ANDNOT, ChainedFilter.ANDNOT });
+
+ hits = searcher.Search(query, chain, 1000);
+ assertEquals("ANDNOT bob ANDNOT bob matches all sues", Max / 2, hits.TotalHits);
+ assertEquals("sue", searcher.Doc(hits.ScoreDocs[0].Doc).Get("owner"));
+ }
+
+ [Test]
+ public virtual void TestWithCachingFilter()
+ {
+ Directory dir = NewDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(Random(), dir);
+ IndexReader reader = writer.Reader;
+ writer.Dispose();
+
+ IndexSearcher searcher = NewSearcher(reader);
+
+ Query query = new TermQuery(new Term("none", "none"));
+
+ QueryWrapperFilter queryFilter = new QueryWrapperFilter(query);
+ CachingWrapperFilter cachingFilter = new CachingWrapperFilter(queryFilter);
+
+ searcher.Search(query, cachingFilter, 1);
+
+ CachingWrapperFilter cachingFilter2 = new CachingWrapperFilter(queryFilter);
+ Filter[] chain = new Filter[2];
+ chain[0] = cachingFilter;
+ chain[1] = cachingFilter2;
+ ChainedFilter cf = new ChainedFilter(chain);
+
+ // throws java.lang.ClassCastException: org.apache.lucene.util.OpenBitSet cannot be cast to java.util.BitSet
+ searcher.Search(new MatchAllDocsQuery(), cf, 1);
+ reader.Dispose();
+ dir.Dispose();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/7b4987f7/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj b/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
index 74afe8f..9264faa 100644
--- a/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
+++ b/src/Lucene.Net.Tests.Queries/Lucene.Net.Tests.Queries.csproj
@@ -43,6 +43,8 @@
</ItemGroup>
<ItemGroup>
<Compile Include="BooleanFilterTest.cs" />
+ <Compile Include="BoostingQueryTest.cs" />
+ <Compile Include="ChainedFilterTest.cs" />
<Compile Include="CommonTermsQueryTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TermFilterTest.cs" />