lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Grant Ingersoll <gsing...@apache.org>
Subject Spans questions
Date Wed, 15 Aug 2007 15:57:47 GMT
Couple of Spans questions for people:

1.  Would the docs be clearer for Spans.end() if it said that the  
span is not inclusive of the end position?  From what I can tell, it  
is not inclusive, correct?

2. I have added the following test to TestSpans.java
public void testSpanNearUnOrdered() throws Exception {

     SpanNearQuery snq;
     SpanNearQuery u1u2 = new SpanNearQuery(new SpanQuery[] 
{makeSpanTermQuery("u1"),
                                 makeSpanTermQuery("u2")}, 0, false);
     snq = new SpanNearQuery(
                               new SpanQuery[] {
                                 u1u2,
                                 makeSpanTermQuery("u2")
                               },
                               1,
                               false);
     spans = snq.getSpans(searcher.getIndexReader());
     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 4, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 3, spans.end());

//Why does this match?
     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 4, spans.doc());
     assertEquals("start", 1, spans.start());
     assertEquals("end", 3, spans.end());

     ...
   }

My question is why does the second span match?  Doc 4 looks like:   
"u2 u2 u1"  (see the docFields array in TestSpans.java)  It seems  
incorrect because it is completely inside of the other Span, but  
maybe I am just not understanding the slop factor or something about  
unordered spans.  I would think there would only be one match for  
this document since the u1u2 has a slop of 0 and the snq has a slop  
of 1 (which shouldn't matter, since there are no other permutations).

In my mind, the correct test should be something like:
public void testSpanNearUnOrdered() throws Exception {

     SpanNearQuery snq;
     snq = new SpanNearQuery(
                               new SpanQuery[] {
                                 makeSpanTermQuery("u1"),
                                 makeSpanTermQuery("u2") },
                               0,
                               false);
     Spans spans = snq.getSpans(searcher.getIndexReader());
     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 4, spans.doc());
     assertEquals("start", 1, spans.start());
     assertEquals("end", 3, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 5, spans.doc());
     assertEquals("start", 2, spans.start());
     assertEquals("end", 4, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 8, spans.doc());
     assertEquals("start", 2, spans.start());
     assertEquals("end", 4, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 9, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 2, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 10, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 2, spans.end());
     assertTrue("Has next and it shouldn't: " + spans.doc(),  
spans.next() == false);

     SpanNearQuery u1u2 = new SpanNearQuery(new SpanQuery[] 
{makeSpanTermQuery("u1"),
                                 makeSpanTermQuery("u2")}, 0, false);
     snq = new SpanNearQuery(
                               new SpanQuery[] {
                                 u1u2,
                                 makeSpanTermQuery("u2")
                               },
                               1,
                               false);
     spans = snq.getSpans(searcher.getIndexReader());
     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 4, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 3, spans.end());


     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 5, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 4, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 8, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 5, spans.end());


     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 9, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 5, spans.end());

     assertTrue("Does not have next and it should", spans.next());
     assertEquals("doc", 10, spans.doc());
     assertEquals("start", 0, spans.start());
     assertEquals("end", 5, spans.end());
     assertTrue("Has next and it shouldn't", spans.next() == false);
   }



Thanks,
Grant


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org


Mime
View raw message