public virtual void TestNearSpansSkipPast() { SpanNearQuery q = MakeQuery(); Spans span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q); Assert.AreEqual(false, span.SkipTo(2)); }
public virtual void TestFirstClauseWithoutPayload() { Spans spans; IndexSearcher searcher = Searcher; 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery); Assert.IsTrue(spans != null, "spans is null and it shouldn't be"); CheckSpans(spans, 1, new int[] { 3 }); CloseIndexReader.Dispose(); Directory.Dispose(); }
public virtual void TestSpans2() { AssumeTrue("Broken scoring: LUCENE-3723", Searcher.Similarity is TFIDFSimilarity); SpanQuery qA1 = new SpanTermQuery(new Term("gender", "female")); SpanQuery qA2 = new SpanTermQuery(new Term("first", "james")); SpanQuery qA = new SpanOrQuery(qA1, new FieldMaskingSpanQuery(qA2, "gender")); SpanQuery qB = new SpanTermQuery(new Term("last", "jones")); SpanQuery q = new SpanNearQuery(new SpanQuery[] { new FieldMaskingSpanQuery(qA, "id"), new FieldMaskingSpanQuery(qB, "id") }, -1, false); Check(q, new int[] { 0, 1, 2, 3 }); 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, 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, 2, 3), s(span)); Assert.AreEqual(true, span.Next()); Assert.AreEqual(s(3, 0, 1), s(span)); Assert.AreEqual(false, span.Next()); }
public virtual void TestNearSpansSkipTo1() { SpanNearQuery q = MakeQuery(); Spans span = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, q); Assert.AreEqual(true, span.SkipTo(1)); Assert.AreEqual(s(1, 0, 4), s(span)); }
public virtual void TestNearSpansNextThenSkipPast() { SpanNearQuery q = MakeQuery(); Spans span = MultiSpansWrapper.Wrap(searcher.TopReaderContext, q); Assert.AreEqual(true, span.MoveNext()); Assert.AreEqual(s(0, 0, 3), s(span)); Assert.AreEqual(false, span.SkipTo(2)); }
private Spans OrSpans(string[] terms) { SpanQuery[] sqa = new SpanQuery[terms.Length]; for (int i = 0; i < terms.Length; i++) { sqa[i] = MakeSpanTermQuery(terms[i]); } return(MultiSpansWrapper.Wrap(searcher.TopReaderContext, new SpanOrQuery(sqa))); }
public virtual void TestNestedSpans() { SpanTermQuery stq; Spans spans; IndexSearcher searcher = Searcher; stq = new SpanTermQuery(new Term(PayloadHelper.FIELD, "mark")); spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, stq); 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, spanNearQuery); 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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, spanNearQuery); 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); // xx within 6 of rr SpanQuery[] clauses2 = new SpanQuery[2]; clauses2[0] = new SpanTermQuery(new Term(PayloadHelper.FIELD, "yy")); clauses2[1] = spanNearQuery; SpanNearQuery nestedSpanNearQuery = new SpanNearQuery(clauses2, 6, false); // yy within 6 of xx within 6 of rr spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, nestedSpanNearQuery); Assert.IsTrue(spans != null, "spans is null and it shouldn't be"); CheckSpans(spans, 2, new int[] { 3, 3 }); CloseIndexReader.Dispose(); Directory.Dispose(); }
public virtual void TestShrinkToAfterShortestMatch3() { 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("j k a l f k k p a t a k l k t a"))); 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 = new SpanQuery[] { 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()) { ICollection <sbyte[]> payloads = spans.Payload; foreach (sbyte[] payload in payloads) { payloadSet.Add(Encoding.UTF8.GetString((byte[])(Array)payload)); } } } Assert.AreEqual(2, payloadSet.Count); if (VERBOSE) { foreach (String payload in payloadSet) { Console.WriteLine("match:" + payload); } } Assert.IsTrue(payloadSet.Contains("a:Noise:10")); Assert.IsTrue(payloadSet.Contains("k:Noise:11")); reader.Dispose(); directory.Dispose(); }
private int SpanCount(string include, string exclude, int pre, int post) { SpanTermQuery iq = new SpanTermQuery(new Term(field, include)); SpanTermQuery eq = new SpanTermQuery(new Term(field, exclude)); SpanNotQuery snq = new SpanNotQuery(iq, eq, pre, post); Spans spans = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq); int i = 0; while (spans.MoveNext()) { i++; } return(i); }
public virtual void TestSpanTermQuery() { SpanTermQuery stq; Spans spans; stq = new SpanTermQuery(new Term(PayloadHelper.FIELD, "seventy")); spans = MultiSpansWrapper.Wrap(IndexReader.Context, stq); 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 = MultiSpansWrapper.Wrap(IndexReader.Context, stq); Assert.IsTrue(spans != null, "spans is null and it shouldn't be"); CheckSpans(spans, 100, 0, 0, 0); }
public virtual void TestSpansSkipTo() { SpanTermQuery t1 = new SpanTermQuery(new Term("field", "seventy")); SpanTermQuery t2 = new SpanTermQuery(new Term("field", "seventy")); Spans s1 = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, t1); Spans s2 = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, t2); Assert.IsTrue(s1.Next()); Assert.IsTrue(s2.Next()); bool hasMore = true; do { hasMore = SkipToAccoringToJavaDocs(s1, s1.Doc() + 1); Assert.AreEqual(hasMore, s2.SkipTo(s2.Doc() + 1)); Assert.AreEqual(s1.Doc(), s2.Doc()); } while (hasMore); }
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 = MultiSpansWrapper.Wrap(searcher.TopReaderContext, snq); Assert.IsTrue(spans.MoveNext(), "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.MoveNext(), "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.MoveNext(), "third range"); }
public virtual void TestShrinkToAfterShortestMatch() { 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 c d e f g h i j a k"))); writer.AddDocument(doc); IndexReader reader = writer.GetReader(); IndexSearcher @is = NewSearcher(reader); writer.Dispose(); SpanTermQuery stq1 = new SpanTermQuery(new Term("content", "a")); SpanTermQuery stq2 = new SpanTermQuery(new Term("content", "k")); SpanQuery[] sqs = new SpanQuery[] { stq1, stq2 }; SpanNearQuery snq = new SpanNearQuery(sqs, 1, 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.GetPayload(); foreach (var payload in payloads) { payloadSet.Add(Encoding.UTF8.GetString(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 TestSpans1() { SpanQuery q1 = new SpanTermQuery(new Term("first", "sally")); SpanQuery q2 = new SpanTermQuery(new Term("first", "james")); SpanQuery qA = new SpanOrQuery(q1, q2); SpanQuery qB = new FieldMaskingSpanQuery(qA, "id"); Check(qA, new int[] { 0, 1, 2, 4 }); Check(qB, new int[] { 0, 1, 2, 4 }); Spans spanA = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, qA); Spans spanB = MultiSpansWrapper.Wrap(Searcher.TopReaderContext, qB); while (spanA.Next()) { Assert.IsTrue(spanB.Next(), "spanB not still going"); Assert.AreEqual(s(spanA), s(spanB), "spanA not equal spanB"); } Assert.IsTrue(!(spanB.Next()), "spanB still going even tough spanA is done"); }
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"); }