public virtual void TestShrinkToAfterShortestMatch2() { Directory directory = NewDirectory(); RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer(this))); Document doc = new Document(); doc.Add(new TextField("content", new StringReader("a b a d k f a h i k a k"))); writer.AddDocument(doc); IndexReader reader = writer.Reader; IndexSearcher @is = NewSearcher(reader); writer.Dispose(); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k")); SpanQuery[] sqs = { stq1, stq2 }; SpanNearQuery snq = new SpanNearQuery(sqs, 0, true); Spans spans = MultiSpansWrapper.Wrap(@is.TopReaderContext, snq); TopDocs topDocs = @is.Search(snq, 1); HashSet <string> payloadSet = new HashSet <string>(); for (int i = 0; i < topDocs.ScoreDocs.Length; i++) { while (spans.Next()) { var payloads = spans.Payload; foreach (var payload in payloads) { payloadSet.Add(Encoding.UTF8.GetString((byte[])(Array)payload)); } } } Assert.AreEqual(2, payloadSet.Count); Assert.IsTrue(payloadSet.Contains("a:Noise:10")); Assert.IsTrue(payloadSet.Contains("k:Noise:11")); reader.Dispose(); directory.Dispose(); }
public virtual void TestSpans0() { SpanQuery q1 = new SpanTermQuery(new Term("gender", "female")); SpanQuery q2 = new SpanTermQuery(new Term("first", "james")); SpanQuery q = new SpanOrQuery(q1, new FieldMaskingSpanQuery(q2, "gender")); Check(q, new int[] { 0, 1, 2, 3, 4 }); Spans span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(0, 0, 1), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(1, 0, 1), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(1, 1, 2), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(2, 0, 1), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(2, 1, 2), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(2, 2, 3), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(3, 0, 1), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(4, 0, 1), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(4, 1, 2), s(span)); Assert.AreEqual(false, span.Next()); }
public virtual void TestSpanFirst() { SpanQuery match; SpanFirstQuery sfq; match = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one")); sfq = new SpanFirstQuery(match, 2); Spans spans = MultiSpansWrapper.Wrap(IndexReader.Context, sfq); 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(MultiSpansWrapper.Wrap(IndexReader.Context, sfq), 100, 2, 1, 1); match = new SpanNearQuery(clauses, 0, false); sfq = new SpanFirstQuery(match, 2); CheckSpans(MultiSpansWrapper.Wrap(IndexReader.Context, sfq), 100, 2, 1, 1); }
public virtual void TestSpanNot() { SpanQuery[] clauses = new SpanQuery[2]; clauses[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "one")); clauses[1] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "three")); SpanQuery spq = new SpanNearQuery(clauses, 5, true); SpanNotQuery snq = new SpanNotQuery(spq, new SpanTermQuery(new Term(PayloadHelper.FIELD, "two"))); Directory directory = NewDirectory(); RandomIndexWriter writer = new RandomIndexWriter(Random(), directory, NewIndexWriterConfig(TEST_VERSION_CURRENT, new PayloadAnalyzer(this)).SetSimilarity(Similarity)); Document doc = new Document(); doc.Add(NewTextField(PayloadHelper.FIELD, "one two three one four three", Field.Store.YES)); writer.AddDocument(doc); IndexReader reader = writer.Reader; writer.Dispose(); CheckSpans(MultiSpansWrapper.Wrap(reader.Context, snq), 1, new int[] { 2 }); reader.Dispose(); directory.Dispose(); }
public virtual void TestHeavilyNestedSpanQuery() { Spans spans; IndexSearcher searcher = Searcher; 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery); Assert.IsTrue(spans != null, "spans is null and it shouldn't be"); CheckSpans(spans, 2, new int[] { 8, 8 }); CloseIndexReader.Dispose(); Directory.Dispose(); }
public virtual 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq); Assert.IsTrue(spans.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext() == 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq); Assert.IsTrue(spans.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext(), "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.MoveNext() == false, "Has next and it shouldn't"); }