I think it is fairly common use case (relative to the rather uncommon use case of using SpanQuery that is) to want to do something like:

...
SpanQuery sq = ...
topDocs = searcher.search(tq, 10);
Spans spans = sq.getSpans(searcher.getIndexReader());

for (int i = 0; i < topDocs.scoreDocs.length; i++) {
spans.seek(topDocs.scoreDocs[i]); //NOTE: seek() does not exist as a method, only skipTo, and skipTo() can only go forward, so this CODE DOESN'T WORK!!!!!!
        //Do something with the info at that span
}

Yet, this really isn't possible because Spans.skipTo() only moves forward. So, you are left trying to marry running the search with moving around in the Spans, or some other rather clunky mechanism and this code is almost always really ugly. Alternatively, people forgo the search() part and just go straight to the spans, but then you miss out on scores.

It just has never felt right to me, but I am not seeing a better way of doing it at the moment, so I thought I would throw it out to the list to see what people think. That is, how can we generate a Spans object that is backed by the order in a ScoreDocs array? The thing is, in order to run the SpanQuery, we iterated over the Spans anyway? I think that what I would really like is for the case where I am doing SpanQuerys that I can tell it to preserve the Span by hanging it off of something (maybe the Collector could have a callback that allows me to collect Span info). (not sure if that makes sense). I realize this would be extra memory, but that is probably a cost I'm willing to pay. Alternatively, we need to add a seek() method to spans() and pay the cost of thrashing.

Thoughts?  Am I off base here or missing something?

-Grant

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

Reply via email to