You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2016/12/10 19:35:35 UTC
[5/7] lucenenet git commit: Corrected physical directory locations of
Lucene.Net.Sandbox and Lucene.Net.Tests.Sandbox
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/87245e31/Lucene.Net.Tests.Sandbox/Queries/FuzzyLikeThisQueryTest.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Tests.Sandbox/Queries/FuzzyLikeThisQueryTest.cs b/Lucene.Net.Tests.Sandbox/Queries/FuzzyLikeThisQueryTest.cs
deleted file mode 100644
index 4b830c6..0000000
--- a/Lucene.Net.Tests.Sandbox/Queries/FuzzyLikeThisQueryTest.cs
+++ /dev/null
@@ -1,159 +0,0 @@
-\ufeffusing Lucene.Net.Analysis;
-using Lucene.Net.Documents;
-using Lucene.Net.Index;
-using Lucene.Net.Search;
-using Lucene.Net.Store;
-using Lucene.Net.Util;
-using NUnit.Framework;
-using System.Collections.Generic;
-
-namespace Lucene.Net.Sandbox.Queries
-{
- /*
- * 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.
- */
-
- public class FuzzyLikeThisQueryTest : LuceneTestCase
- {
- private Directory directory;
- private IndexSearcher searcher;
- private IndexReader reader;
- private Analyzer analyzer;
-
- public override void SetUp()
- {
- base.SetUp();
-
- analyzer = new MockAnalyzer(Random());
- directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergePolicy(NewLogMergePolicy()));
-
- //Add series of docs with misspelt names
- AddDoc(writer, "jonathon smythe", "1");
- AddDoc(writer, "jonathan smith", "2");
- AddDoc(writer, "johnathon smyth", "3");
- AddDoc(writer, "johnny smith", "4");
- AddDoc(writer, "jonny smith", "5");
- AddDoc(writer, "johnathon smythe", "6");
- reader = writer.Reader;
- writer.Dispose();
- searcher = NewSearcher(reader);
- }
-
- public override void TearDown()
- {
- reader.Dispose();
- directory.Dispose();
- base.TearDown();
- }
-
- private void AddDoc(RandomIndexWriter writer, string name, string id)
- {
- Document doc = new Document();
- doc.Add(NewTextField("name", name, Field.Store.YES));
- doc.Add(NewTextField("id", id, Field.Store.YES));
- writer.AddDocument(doc);
- }
-
-
- //Tests that idf ranking is not favouring rare mis-spellings over a strong edit-distance match
- [Test]
- public void TestClosestEditDistanceMatchComesFirst()
- {
- FuzzyLikeThisQuery flt = new FuzzyLikeThisQuery(10, analyzer);
- flt.AddTerms("smith", "name", 0.3f, 1);
- Query q = flt.Rewrite(searcher.IndexReader);
- HashSet<Term> queryTerms = new HashSet<Term>();
- q.ExtractTerms(queryTerms);
- assertTrue("Should have variant smythe", queryTerms.contains(new Term("name", "smythe")));
- assertTrue("Should have variant smith", queryTerms.contains(new Term("name", "smith")));
- assertTrue("Should have variant smyth", queryTerms.contains(new Term("name", "smyth")));
- TopDocs topDocs = searcher.Search(flt, 1);
- ScoreDoc[] sd = topDocs.ScoreDocs;
- assertTrue("score docs must match 1 doc", (sd != null) && (sd.Length > 0));
- Document doc = searcher.Doc(sd[0].Doc);
- assertEquals("Should match most similar not most rare variant", "2", doc.Get("id"));
- }
-
- //Test multiple input words are having variants produced
- [Test]
- public void TestMultiWord()
- {
- FuzzyLikeThisQuery flt = new FuzzyLikeThisQuery(10, analyzer);
- flt.AddTerms("jonathin smoth", "name", 0.3f, 1);
- Query q = flt.Rewrite(searcher.IndexReader);
- HashSet<Term> queryTerms = new HashSet<Term>();
- q.ExtractTerms(queryTerms);
- assertTrue("Should have variant jonathan", queryTerms.contains(new Term("name", "jonathan")));
- assertTrue("Should have variant smith", queryTerms.contains(new Term("name", "smith")));
- TopDocs topDocs = searcher.Search(flt, 1);
- ScoreDoc[] sd = topDocs.ScoreDocs;
- assertTrue("score docs must match 1 doc", (sd != null) && (sd.Length > 0));
- Document doc = searcher.Doc(sd[0].Doc);
- assertEquals("Should match most similar when using 2 words", "2", doc.Get("id"));
- }
-
- // LUCENE-4809
- [Test]
- public void TestNonExistingField()
- {
- FuzzyLikeThisQuery flt = new FuzzyLikeThisQuery(10, analyzer);
- flt.AddTerms("jonathin smoth", "name", 0.3f, 1);
- flt.AddTerms("jonathin smoth", "this field does not exist", 0.3f, 1);
- // don't fail here just because the field doesn't exits
- Query q = flt.Rewrite(searcher.IndexReader);
- HashSet<Term> queryTerms = new HashSet<Term>();
- q.ExtractTerms(queryTerms);
- assertTrue("Should have variant jonathan", queryTerms.contains(new Term("name", "jonathan")));
- assertTrue("Should have variant smith", queryTerms.contains(new Term("name", "smith")));
- TopDocs topDocs = searcher.Search(flt, 1);
- ScoreDoc[] sd = topDocs.ScoreDocs;
- assertTrue("score docs must match 1 doc", (sd != null) && (sd.Length > 0));
- Document doc = searcher.Doc(sd[0].Doc);
- assertEquals("Should match most similar when using 2 words", "2", doc.Get("id"));
- }
-
-
- //Test bug found when first query word does not match anything
- [Test]
- public void TestNoMatchFirstWordBug()
- {
- FuzzyLikeThisQuery flt = new FuzzyLikeThisQuery(10, analyzer);
- flt.AddTerms("fernando smith", "name", 0.3f, 1);
- Query q = flt.Rewrite(searcher.IndexReader);
- HashSet<Term> queryTerms = new HashSet<Term>();
- q.ExtractTerms(queryTerms);
- assertTrue("Should have variant smith", queryTerms.contains(new Term("name", "smith")));
- TopDocs topDocs = searcher.Search(flt, 1);
- ScoreDoc[] sd = topDocs.ScoreDocs;
- assertTrue("score docs must match 1 doc", (sd != null) && (sd.Length > 0));
- Document doc = searcher.Doc(sd[0].Doc);
- assertEquals("Should match most similar when using 2 words", "2", doc.Get("id"));
- }
-
- [Test]
- public void TestFuzzyLikeThisQueryEquals()
- {
- Analyzer analyzer = new MockAnalyzer(Random());
- FuzzyLikeThisQuery fltq1 = new FuzzyLikeThisQuery(10, analyzer);
- fltq1.AddTerms("javi", "subject", 0.5f, 2);
- FuzzyLikeThisQuery fltq2 = new FuzzyLikeThisQuery(10, analyzer);
- fltq2.AddTerms("javi", "subject", 0.5f, 2);
- assertEquals("FuzzyLikeThisQuery with same attributes is not equal", fltq1,
- fltq2);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/87245e31/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery.cs b/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery.cs
deleted file mode 100644
index 4baa0e7..0000000
--- a/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery.cs
+++ /dev/null
@@ -1,516 +0,0 @@
-\ufeffusing Lucene.Net.Documents;
-using Lucene.Net.Index;
-using Lucene.Net.Search;
-using Lucene.Net.Store;
-using Lucene.Net.Support;
-using Lucene.Net.Util;
-using NUnit.Framework;
-using System;
-using System.Collections.Generic;
-
-#pragma warning disable 612, 618
-namespace Lucene.Net.Sandbox.Queries
-{
- /*
- * 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.
- */
-
- /// <summary>
- /// Tests <see cref="SlowFuzzyQuery"/>
- /// </summary>
- public class TestSlowFuzzyQuery : LuceneTestCase
- {
- [Test]
- public void TestFuzziness()
- {
- //every test with SlowFuzzyQuery.defaultMinSimilarity
- //is exercising the Automaton, not the brute force linear method
-
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("aaaaa", writer);
- addDoc("aaaab", writer);
- addDoc("aaabb", writer);
- addDoc("aabbb", writer);
- addDoc("abbbb", writer);
- addDoc("bbbbb", writer);
- addDoc("ddddd", writer);
-
- IndexReader reader = writer.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- writer.Dispose();
-
- SlowFuzzyQuery query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- ScoreDoc[] hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
-
- // same with prefix
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 3);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 4);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(2, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 5);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 6);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
-
- // test scoring
- query = new SlowFuzzyQuery(new Term("field", "bbbbb"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals("3 documents should match", 3, hits.Length);
- List<String> order = Arrays.AsList("bbbbb", "abbbb", "aabbb");
- for (int i = 0; i < hits.Length; i++)
- {
- string term = searcher.Doc(hits[i].Doc).Get("field");
- //System.out.println(hits[i].score);
- assertEquals(order[i], term);
- }
-
- // test pq size by supplying maxExpansions=2
- // This query would normally return 3 documents, because 3 terms match (see above):
- query = new SlowFuzzyQuery(new Term("field", "bbbbb"), SlowFuzzyQuery.defaultMinSimilarity, 0, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals("only 2 documents should match", 2, hits.Length);
- order = Arrays.AsList("bbbbb", "abbbb");
- for (int i = 0; i < hits.Length; i++)
- {
- string term = searcher.Doc(hits[i].Doc).Get("field");
- //System.out.println(hits[i].score);
- assertEquals(order[i], term);
- }
-
- // not similar enough:
- query = new SlowFuzzyQuery(new Term("field", "xxxxx"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "aaccc"), SlowFuzzyQuery.defaultMinSimilarity, 0); // edit distance to "aaaaa" = 3
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // query identical to a word in the index:
- query = new SlowFuzzyQuery(new Term("field", "aaaaa"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- // default allows for up to two edits:
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- assertEquals(searcher.Doc(hits[2].Doc).Get("field"), ("aaabb"));
-
- // query similar to a word in the index:
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- assertEquals(searcher.Doc(hits[2].Doc).Get("field"), ("aaabb"));
-
- // now with prefix
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- assertEquals(searcher.Doc(hits[2].Doc).Get("field"), ("aaabb"));
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- assertEquals(searcher.Doc(hits[2].Doc).Get("field"), ("aaabb"));
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 3);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- assertEquals(searcher.Doc(hits[2].Doc).Get("field"), ("aaabb"));
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 4);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(2, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaa"));
- assertEquals(searcher.Doc(hits[1].Doc).Get("field"), ("aaaab"));
- query = new SlowFuzzyQuery(new Term("field", "aaaac"), SlowFuzzyQuery.defaultMinSimilarity, 5);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
-
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("ddddd"));
-
- // now with prefix
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("ddddd"));
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("ddddd"));
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 3);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("ddddd"));
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 4);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("ddddd"));
- query = new SlowFuzzyQuery(new Term("field", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 5);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
-
- // different field = no match:
- query = new SlowFuzzyQuery(new Term("anotherfield", "ddddX"), SlowFuzzyQuery.defaultMinSimilarity, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- reader.Dispose();
- directory.Dispose();
- }
-
- [Test]
- public void TestFuzzinessLong2()
- {
- //Lucene-5033
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("abcdef", writer);
- addDoc("segment", writer);
-
- IndexReader reader = writer.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- writer.Dispose();
-
- SlowFuzzyQuery query;
-
- query = new SlowFuzzyQuery(new Term("field", "abcxxxx"), 3f, 0);
- ScoreDoc[] hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- query = new SlowFuzzyQuery(new Term("field", "abcxxxx"), 4f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- reader.Dispose();
- directory.Dispose();
- }
-
- [Test]
- public void TestFuzzinessLong()
- {
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("aaaaaaa", writer);
- addDoc("segment", writer);
-
- IndexReader reader = writer.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- writer.Dispose();
-
- SlowFuzzyQuery query;
- // not similar enough:
- query = new SlowFuzzyQuery(new Term("field", "xxxxx"), 0.5f, 0);
- ScoreDoc[] hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
- // edit distance to "aaaaaaa" = 3, this matches because the string is longer than
- // in testDefaultFuzziness so a bigger difference is allowed:
- query = new SlowFuzzyQuery(new Term("field", "aaaaccc"), 0.5f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaaaa"));
-
- // now with prefix
- query = new SlowFuzzyQuery(new Term("field", "aaaaccc"), 0.5f, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaaaa"));
- query = new SlowFuzzyQuery(new Term("field", "aaaaccc"), 0.5f, 4);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals(searcher.Doc(hits[0].Doc).Get("field"), ("aaaaaaa"));
- query = new SlowFuzzyQuery(new Term("field", "aaaaccc"), 0.5f, 5);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // no match, more than half of the characters is wrong:
- query = new SlowFuzzyQuery(new Term("field", "aaacccc"), 0.5f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // now with prefix
- query = new SlowFuzzyQuery(new Term("field", "aaacccc"), 0.5f, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // "student" and "stellent" are indeed similar to "segment" by default:
- query = new SlowFuzzyQuery(new Term("field", "student"), 0.5f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "stellent"), 0.5f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
-
- // now with prefix
- query = new SlowFuzzyQuery(new Term("field", "student"), 0.5f, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "stellent"), 0.5f, 1);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "student"), 0.5f, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
- query = new SlowFuzzyQuery(new Term("field", "stellent"), 0.5f, 2);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // "student" doesn't match anymore thanks to increased minimum similarity:
- query = new SlowFuzzyQuery(new Term("field", "student"), 0.6f, 0);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- try
- {
- query = new SlowFuzzyQuery(new Term("field", "student"), 1.1f);
- fail("Expected IllegalArgumentException");
- }
-#pragma warning disable 168
- catch (ArgumentException e)
-#pragma warning restore 168
- {
- // expecting exception
- }
- try
- {
- query = new SlowFuzzyQuery(new Term("field", "student"), -0.1f);
- fail("Expected IllegalArgumentException");
- }
-#pragma warning disable 168
- catch (ArgumentException e)
-#pragma warning restore 168
- {
- // expecting exception
- }
-
- reader.Dispose();
- directory.Dispose();
- }
-
- /**
- * MultiTermQuery provides (via attribute) information about which values
- * must be competitive to enter the priority queue.
- *
- * SlowFuzzyQuery optimizes itself around this information, if the attribute
- * is not implemented correctly, there will be problems!
- */
- [Test]
- public void TestTieBreaker()
- {
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("a123456", writer);
- addDoc("c123456", writer);
- addDoc("d123456", writer);
- addDoc("e123456", writer);
-
- Directory directory2 = NewDirectory();
- RandomIndexWriter writer2 = new RandomIndexWriter(Random(), directory2, Similarity, TimeZone);
- addDoc("a123456", writer2);
- addDoc("b123456", writer2);
- addDoc("b123456", writer2);
- addDoc("b123456", writer2);
- addDoc("c123456", writer2);
- addDoc("f123456", writer2);
-
- IndexReader ir1 = writer.Reader;
- IndexReader ir2 = writer2.Reader;
-
- MultiReader mr = new MultiReader(ir1, ir2);
- IndexSearcher searcher = NewSearcher(mr);
- SlowFuzzyQuery fq = new SlowFuzzyQuery(new Term("field", "z123456"), 1f, 0, 2);
- TopDocs docs = searcher.Search(fq, 2);
- assertEquals(5, docs.TotalHits); // 5 docs, from the a and b's
- mr.Dispose();
- ir1.Dispose();
- ir2.Dispose();
- writer.Dispose();
- writer2.Dispose();
- directory.Dispose();
- directory2.Dispose();
- }
-
- [Test]
- public void TestTokenLengthOpt()
- {
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("12345678911", writer);
- addDoc("segment", writer);
-
- IndexReader reader = writer.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- writer.Dispose();
-
- Query query;
- // term not over 10 chars, so optimization shortcuts
- query = new SlowFuzzyQuery(new Term("field", "1234569"), 0.9f);
- ScoreDoc[] hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // 10 chars, so no optimization
- query = new SlowFuzzyQuery(new Term("field", "1234567891"), 0.9f);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- // over 10 chars, so no optimization
- query = new SlowFuzzyQuery(new Term("field", "12345678911"), 0.9f);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(1, hits.Length);
-
- // over 10 chars, no match
- query = new SlowFuzzyQuery(new Term("field", "sdfsdfsdfsdf"), 0.9f);
- hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(0, hits.Length);
-
- reader.Dispose();
- directory.Dispose();
- }
-
- /** Test the TopTermsBoostOnlyBooleanQueryRewrite rewrite method. */
- [Test]
- public void TestBoostOnlyRewrite()
- {
- Directory directory = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, Similarity, TimeZone);
- addDoc("Lucene", writer);
- addDoc("Lucene", writer);
- addDoc("Lucenne", writer);
-
- IndexReader reader = writer.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- writer.Dispose();
-
- SlowFuzzyQuery query = new SlowFuzzyQuery(new Term("field", "lucene"));
- query.SetRewriteMethod(new MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite(50));
- ScoreDoc[] hits = searcher.Search(query, null, 1000).ScoreDocs;
- assertEquals(3, hits.Length);
- // normally, 'Lucenne' would be the first result as IDF will skew the score.
- assertEquals("Lucene", reader.Document(hits[0].Doc).Get("field"));
- assertEquals("Lucene", reader.Document(hits[1].Doc).Get("field"));
- assertEquals("Lucenne", reader.Document(hits[2].Doc).Get("field"));
- reader.Dispose();
- directory.Dispose();
- }
-
- [Test]
- public void TestGiga()
- {
-
- Directory index = NewDirectory();
- RandomIndexWriter w = new RandomIndexWriter(Random(), index, Similarity, TimeZone);
-
- addDoc("Lucene in Action", w);
- addDoc("Lucene for Dummies", w);
-
- //addDoc("Giga", w);
- addDoc("Giga byte", w);
-
- addDoc("ManagingGigabytesManagingGigabyte", w);
- addDoc("ManagingGigabytesManagingGigabytes", w);
-
- addDoc("The Art of Computer Science", w);
- addDoc("J. K. Rowling", w);
- addDoc("JK Rowling", w);
- addDoc("Joanne K Roling", w);
- addDoc("Bruce Willis", w);
- addDoc("Willis bruce", w);
- addDoc("Brute willis", w);
- addDoc("B. willis", w);
- IndexReader r = w.Reader;
- w.Dispose();
-
- Query q = new SlowFuzzyQuery(new Term("field", "giga"), 0.9f);
-
- // 3. search
- IndexSearcher searcher = NewSearcher(r);
- ScoreDoc[] hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals("Giga byte", searcher.Doc(hits[0].Doc).Get("field"));
- r.Dispose();
- index.Dispose();
- }
-
- [Test]
- public void TestDistanceAsEditsSearching()
- {
- Directory index = NewDirectory();
- RandomIndexWriter w = new RandomIndexWriter(Random(), index, Similarity, TimeZone);
- addDoc("foobar", w);
- addDoc("test", w);
- addDoc("working", w);
- IndexReader reader = w.Reader;
- IndexSearcher searcher = NewSearcher(reader);
- w.Dispose();
-
- SlowFuzzyQuery q = new SlowFuzzyQuery(new Term("field", "fouba"), 2);
- ScoreDoc[] hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals("foobar", searcher.Doc(hits[0].Doc).Get("field"));
-
- q = new SlowFuzzyQuery(new Term("field", "foubara"), 2);
- hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals("foobar", searcher.Doc(hits[0].Doc).Get("field"));
-
- q = new SlowFuzzyQuery(new Term("field", "t"), 3);
- hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals("test", searcher.Doc(hits[0].Doc).Get("field"));
-
- q = new SlowFuzzyQuery(new Term("field", "a"), 4f, 0, 50);
- hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(1, hits.Length);
- assertEquals("test", searcher.Doc(hits[0].Doc).Get("field"));
-
- q = new SlowFuzzyQuery(new Term("field", "a"), 6f, 0, 50);
- hits = searcher.Search(q, 10).ScoreDocs;
- assertEquals(2, hits.Length);
- assertEquals("test", searcher.Doc(hits[0].Doc).Get("field"));
- assertEquals("foobar", searcher.Doc(hits[1].Doc).Get("field"));
-
- reader.Dispose();
- index.Dispose();
- }
-
- private void addDoc(string text, RandomIndexWriter writer)
- {
- Document doc = new Document();
- doc.Add(NewTextField("field", text, Field.Store.YES));
- writer.AddDocument(doc);
- }
- }
-}
-#pragma warning restore 612, 618
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/87245e31/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery2.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery2.cs b/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery2.cs
deleted file mode 100644
index 6a2988e..0000000
--- a/Lucene.Net.Tests.Sandbox/Queries/TestSlowFuzzyQuery2.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-\ufeffusing Lucene.Net.Analysis;
-using Lucene.Net.Documents;
-using Lucene.Net.Index;
-using Lucene.Net.Search;
-using Lucene.Net.Search.Similarities;
-using Lucene.Net.Support;
-using Lucene.Net.Util;
-using NUnit.Framework;
-using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-namespace Lucene.Net.Sandbox.Queries
-{
- /*
- * 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.
- */
-
- /**
- * Tests the results of fuzzy against pre-recorded output
- * The format of the file is the following:
- *
- * Header Row: # of bits: generate 2^n sequential documents
- * with a value of Integer.toBinaryString
- *
- * Entries: an entry is a param spec line, a resultCount line, and
- * then 'resultCount' results lines. The results lines are in the
- * expected order.
- *
- * param spec line: a comma-separated list of params to FuzzyQuery
- * (query, prefixLen, pqSize, minScore)
- * query = query text as a number (expand with Integer.toBinaryString)
- * prefixLen = prefix length
- * pqSize = priority queue maximum size for TopTermsBoostOnlyBooleanQueryRewrite
- * minScore = minimum similarity
- *
- * resultCount line: total number of expected hits.
- *
- * results line: comma-separated docID, score pair
- **/
- public class TestSlowFuzzyQuery2 : LuceneTestCase
- {
- /** epsilon for score comparisons */
- static readonly float epsilon = 0.00001f;
-
- static int[][] mappings = new int[][] {
- new int[] { 0x40, 0x41 },
- new int[] { 0x40, 0x0195 },
- new int[] { 0x40, 0x0906 },
- new int[] { 0x40, 0x1040F },
- new int[] { 0x0194, 0x0195 },
- new int[] { 0x0194, 0x0906 },
- new int[] { 0x0194, 0x1040F },
- new int[] { 0x0905, 0x0906 },
- new int[] { 0x0905, 0x1040F },
- new int[] { 0x1040E, 0x1040F }
- };
-
- [Test]
- public void TestFromTestData()
- {
- // TODO: randomize!
- assertFromTestData(mappings[Random().nextInt(mappings.Length)]);
- }
-
- public void assertFromTestData(int[] codePointTable)
- {
- if (VERBOSE)
- {
- Console.WriteLine("TEST: codePointTable=" + codePointTable);
- }
- //Stream stream = GetType().getResourceAsStream("fuzzyTestData.txt");
- Stream stream = GetType().Assembly.GetManifestResourceStream("Lucene.Net.Sandbox.Queries.fuzzyTestData.txt");
- TextReader reader = new StreamReader(stream, Encoding.UTF8);
-
- int bits = int.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);
- int terms = (int)Math.Pow(2, bits);
-
- Store.Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random(), MockTokenizer.KEYWORD, false)).SetMergePolicy(NewLogMergePolicy()));
-
- Document doc = new Document();
- Field field = NewTextField("field", "", Field.Store.NO);
- doc.Add(field);
-
- for (int i = 0; i < terms; i++)
- {
- field.StringValue = (MapInt(codePointTable, i));
- writer.AddDocument(doc);
- }
-
- IndexReader r = writer.Reader;
- IndexSearcher searcher = NewSearcher(r);
- if (VERBOSE)
- {
- Console.WriteLine("TEST: searcher=" + searcher);
- }
- // even though this uses a boost-only rewrite, this test relies upon queryNorm being the default implementation,
- // otherwise scores are different!
- searcher.Similarity = (new DefaultSimilarity());
-
- writer.Dispose();
- String line;
- int lineNum = 0;
- while ((line = reader.ReadLine()) != null)
- {
- lineNum++;
- String[] @params = line.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- String query = MapInt(codePointTable, int.Parse(@params[0], CultureInfo.InvariantCulture));
- int prefix = int.Parse(@params[1], CultureInfo.InvariantCulture);
- int pqSize = int.Parse(@params[2], CultureInfo.InvariantCulture);
- float minScore = float.Parse(@params[3], CultureInfo.InvariantCulture);
-#pragma warning disable 612, 618
- SlowFuzzyQuery q = new SlowFuzzyQuery(new Term("field", query), minScore, prefix);
-#pragma warning restore 612, 618
- q.SetRewriteMethod(new MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite(pqSize));
- int expectedResults = int.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);
- TopDocs docs = searcher.Search(q, expectedResults);
- assertEquals(expectedResults, docs.TotalHits);
- for (int i = 0; i < expectedResults; i++)
- {
- String[] scoreDoc = reader.ReadLine().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- assertEquals(int.Parse(scoreDoc[0], CultureInfo.InvariantCulture), docs.ScoreDocs[i].Doc);
- assertEquals(float.Parse(scoreDoc[1], CultureInfo.InvariantCulture), docs.ScoreDocs[i].Score, epsilon);
- }
- }
- r.Dispose();
- dir.Dispose();
- }
-
- /* map bits to unicode codepoints */
- private static String MapInt(int[] codePointTable, int i)
- {
- StringBuilder sb = new StringBuilder();
- String binary = Number.ToBinaryString(i);
- for (int j = 0; j < binary.Length; j++)
- sb.AppendCodePoint(codePointTable[binary[j] - '0']);
- return sb.toString();
- }
-
- /* Code to generate test data
- public static void main(String args[]) throws Exception {
- int bits = 3;
- System.out.println(bits);
- int terms = (int) Math.pow(2, bits);
-
- RAMDirectory dir = new RAMDirectory();
- IndexWriter writer = new IndexWriter(dir, new KeywordAnalyzer(),
- IndexWriter.MaxFieldLength.UNLIMITED);
-
- Document doc = new Document();
- Field field = newField("field", "", Field.Store.NO, Field.Index.ANALYZED);
- doc.add(field);
-
- for (int i = 0; i < terms; i++) {
- field.setValue(Integer.toBinaryString(i));
- writer.addDocument(doc);
- }
-
- writer.forceMerge(1);
- writer.close();
-
- IndexSearcher searcher = new IndexSearcher(dir);
- for (int prefix = 0; prefix < bits; prefix++)
- for (int pqsize = 1; pqsize <= terms; pqsize++)
- for (float minscore = 0.1F; minscore < 1F; minscore += 0.2F)
- for (int query = 0; query < terms; query++) {
- FuzzyQuery q = new FuzzyQuery(
- new Term("field", Integer.toBinaryString(query)), minscore, prefix);
- q.setRewriteMethod(new MultiTermQuery.TopTermsBoostOnlyBooleanQueryRewrite(pqsize));
- System.out.println(query + "," + prefix + "," + pqsize + "," + minscore);
- TopDocs docs = searcher.search(q, terms);
- System.out.println(docs.totalHits);
- for (int i = 0; i < docs.totalHits; i++)
- System.out.println(docs.scoreDocs[i].doc + "," + docs.scoreDocs[i].score);
- }
- }
- */
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/87245e31/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortField.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortField.cs b/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortField.cs
deleted file mode 100644
index 4a14356..0000000
--- a/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortField.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-\ufeffusing Lucene.Net.Documents;
-using Lucene.Net.Index;
-using Lucene.Net.Search;
-using Lucene.Net.Store;
-using Lucene.Net.Util;
-using NUnit.Framework;
-using System;
-
-namespace Lucene.Net.Sandbox.Queries
-{
- /*
- * 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.
- */
-
- /// <summary>Simple tests for SortedSetSortField</summary>
- public class TestSortedSetSortField : LuceneTestCase
- {
- [Test]
- public void TestForward()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(NewStringField("value", "baz", Field.Store.NO));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("value", "foo", Field.Store.NO));
- doc.Add(NewStringField("value", "bar", Field.Store.NO));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", false));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestReverse()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(NewStringField("value", "foo", Field.Store.NO));
- doc.Add(NewStringField("value", "bar", Field.Store.NO));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("value", "baz", Field.Store.NO));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
-
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", true));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("2", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("1", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestMissingFirst()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(NewStringField("value", "baz", Field.Store.NO));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("value", "foo", Field.Store.NO));
- doc.Add(NewStringField("value", "bar", Field.Store.NO));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("id", "3", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- SortField sortField = new SortedSetSortField("value", false);
- sortField.MissingValue = (SortField.STRING_FIRST);
- Sort sort = new Sort(sortField);
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.TotalHits);
- // 'bar' comes before 'baz'
- // null comes first
- assertEquals("3", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("1", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[2].Doc).Get("id"));
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestMissingLast()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(NewStringField("value", "baz", Field.Store.NO));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("value", "foo", Field.Store.NO));
- doc.Add(NewStringField("value", "bar", Field.Store.NO));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("id", "3", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- SortField sortField = new SortedSetSortField("value", false);
- sortField.MissingValue = (SortField.STRING_LAST);
- Sort sort = new Sort(sortField);
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- // null comes last
- assertEquals("3", searcher.Doc(td.ScoreDocs[2].Doc).Get("id"));
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestSingleton()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(NewStringField("value", "baz", Field.Store.NO));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("value", "bar", Field.Store.NO));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", false));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestEmptyIndex()
- {
- IndexSearcher empty = NewSearcher(new MultiReader());
- Query query = new TermQuery(new Term("contents", "foo"));
-
- Sort sort = new Sort();
- sort.SetSort(new SortedSetSortField("sortedset", false));
- TopDocs td = empty.Search(query, null, 10, sort, true, true);
- assertEquals(0, td.TotalHits);
-
- // for an empty index, any selector should work
- foreach (Selector v in Enum.GetValues(typeof(Selector)))
- {
- sort.SetSort(new SortedSetSortField("sortedset", false, v));
- td = empty.Search(query, null, 10, sort, true, true);
- assertEquals(0, td.TotalHits);
- }
- }
-
- [Test]
- public void TestEquals()
- {
- SortField sf = new SortedSetSortField("a", false);
- assertFalse(sf.equals(null));
-
-
- assertEquals(sf, sf);
-
- SortField sf2 = new SortedSetSortField("a", false);
- assertEquals(sf, sf2);
- assertEquals(sf.GetHashCode(), sf2.GetHashCode());
-
-
- assertFalse(sf.equals(new SortedSetSortField("a", true)));
- assertFalse(sf.equals(new SortedSetSortField("b", false)));
- assertFalse(sf.equals(new SortedSetSortField("a", false, Selector.MAX)));
- assertFalse(sf.equals("foo"));
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/lucenenet/blob/87245e31/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortFieldDocValues.cs
----------------------------------------------------------------------
diff --git a/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortFieldDocValues.cs b/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortFieldDocValues.cs
deleted file mode 100644
index 342f679..0000000
--- a/Lucene.Net.Tests.Sandbox/Queries/TestSortedSetSortFieldDocValues.cs
+++ /dev/null
@@ -1,213 +0,0 @@
-\ufeffusing Lucene.Net.Documents;
-using Lucene.Net.Index;
-using Lucene.Net.Search;
-using Lucene.Net.Store;
-using Lucene.Net.Util;
-using NUnit.Framework;
-
-namespace Lucene.Net.Sandbox.Queries
-{
- /*
- * 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.
- */
-
- /// <summary>Simple tests for SortedSetSortField, indexing the sortedset up front</summary>
- [SuppressCodecs("Lucene40", "Lucene41", "Appending", "Lucene3x")]// avoid codecs that don't support sortedset
- public class TestSortedSetSortFieldDocValues : LuceneTestCase
- {
- public override void SetUp()
- {
- base.SetUp();
- // ensure there is nothing in fieldcache before test starts
- FieldCache.DEFAULT.PurgeAllCaches();
- }
-
- private void assertNoFieldCaches()
- {
- // docvalues sorting should NOT create any fieldcache entries!
- assertEquals(0, FieldCache.DEFAULT.CacheEntries.Length);
- }
-
- [Test]
- public void TestForward()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("baz")));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("foo")));
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("bar")));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", false));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- assertNoFieldCaches();
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestReverse()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("foo")));
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("bar")));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("baz")));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
-
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", true));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("2", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("1", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- assertNoFieldCaches();
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestMissingFirst()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("baz")));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("foo")));
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("bar")));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("id", "3", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- SortField sortField = new SortedSetSortField("value", false);
- sortField.MissingValue = (SortField.STRING_FIRST);
- Sort sort = new Sort(sortField);
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.TotalHits);
- // 'bar' comes before 'baz'
- // null comes first
- assertEquals("3", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("1", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[2].Doc).Get("id"));
- assertNoFieldCaches();
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestMissingLast()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("baz")));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("foo")));
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("bar")));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(NewStringField("id", "3", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- SortField sortField = new SortedSetSortField("value", false);
- sortField.MissingValue = (SortField.STRING_LAST);
- Sort sort = new Sort(sortField);
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(3, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- // null comes last
- assertEquals("3", searcher.Doc(td.ScoreDocs[2].Doc).Get("id"));
- assertNoFieldCaches();
-
- ir.Dispose();
- dir.Dispose();
- }
-
- [Test]
- public void TestSingleton()
- {
- Directory dir = NewDirectory();
- RandomIndexWriter writer = new RandomIndexWriter(Random(), dir, Similarity, TimeZone);
- Document doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("baz")));
- doc.Add(NewStringField("id", "2", Field.Store.YES));
- writer.AddDocument(doc);
- doc = new Document();
- doc.Add(new SortedSetDocValuesField("value", new BytesRef("bar")));
- doc.Add(NewStringField("id", "1", Field.Store.YES));
- writer.AddDocument(doc);
- IndexReader ir = writer.Reader;
- writer.Dispose();
-
- IndexSearcher searcher = NewSearcher(ir);
- Sort sort = new Sort(new SortedSetSortField("value", false));
-
- TopDocs td = searcher.Search(new MatchAllDocsQuery(), 10, sort);
- assertEquals(2, td.TotalHits);
- // 'bar' comes before 'baz'
- assertEquals("1", searcher.Doc(td.ScoreDocs[0].Doc).Get("id"));
- assertEquals("2", searcher.Doc(td.ScoreDocs[1].Doc).Get("id"));
- assertNoFieldCaches();
-
- ir.Dispose();
- dir.Dispose();
- }
- }
-}