I've been working on some highlighting changes involving Spans 
(https://issues.apache.org/jira/browse/LUCENE-2287) and could use some help 
understanding when overlapping Spans are valid.  To illustrate, I added the 
test below to the TestSpans class; this test fails because there is no fourth 
range.

Am I wrong in my expectation that that last range would match?

Thanks.

  Mike


  // Doc 11 contains "t1 t2 t1 t3 t2 t3"
  public void testSpanNearUnOrderedOverlap() throws Exception {
    boolean ordered = false;
    int slop = 1;
    SpanNearQuery snq = new SpanNearQuery(
                              new SpanQuery[] {
                                makeSpanTermQuery("t1"),
                                makeSpanTermQuery("t2"),
                                makeSpanTermQuery("t3") },
                              slop,
                              ordered);
    Spans spans = snq.getSpans(searcher.getIndexReader());
    
    assertTrue("first range", spans.next());
    assertEquals("first doc", 11, spans.doc());
    assertEquals("first start", 0, spans.start());
    assertEquals("first end", 4, spans.end());
    
    assertTrue("second range", spans.next());
    assertEquals("second doc", 11, spans.doc());
    assertEquals("second start", 1, spans.start());
    assertEquals("second end", 4, spans.end());
    
    assertTrue("third range", spans.next());
    assertEquals("third doc", 11, spans.doc());
    assertEquals("third start", 2, spans.start());
    assertEquals("third end", 5, spans.end());
    
    // Question: why wouldn't this Span be found?
    assertTrue("fourth range", spans.next());
    assertEquals("fourth doc", 11, spans.doc());
    assertEquals("fourth start", 2, spans.start());
    assertEquals("fourth end", 6, spans.end());
    
    assertFalse("fifth range", spans.next());
  }

Reply via email to