On the living github version of LUCENE-5317, I'm trying to migrate to 6.0, and
most is fairly clear.
However, how do I modify the following code to return spans only from documents
that match the -Filter- Query.
For each LeafReaderContext, I used to get a DocIdSet, call the iterator on
that, and then iterate through the DocIdSetIterator along with the spans to
retrieve spans in documents matching the Filter.
for (LeafReaderContext ctx : searcher.getIndexReader().leaves()) {
DocIdSet filterSet = filter.getDocIdSet(ctx, ctx.reader().getLiveDocs());
if (filterSet == null) {
return;
}
Spans spans = w.getSpans(ctx, SpanWeight.Postings.POSITIONS);
if (spans == null) {
continue;
}
DocIdSetIterator filterItr = filterSet.iterator();
.....
}
And then iterate through the filterItr and spans like so...
while (true) {
if (spansDoc == DocIdSetIterator.NO_MORE_DOCS) {
break;
}
filterDoc = filterItr.advance(spansDoc);
if (filterDoc == DocIdSetIterator.NO_MORE_DOCS) {
break;
} else if (filterDoc > spansDoc) {
while (spansDoc <= filterDoc) {
spansDoc = spans.nextDoc();
if (spansDoc == filterDoc) {
boolean cont = visit(leafCtx, spans, visitor);
if (! cont) {
return false;
}
} else {
continue;
}
}
} else if (filterDoc == spansDoc) {
boolean cont = visit(leafCtx, spans, visitor);
if (! cont) {
return false;
}
//then iterate spans
spansDoc = spans.nextDoc();
} else if (filterDoc < spansDoc) {
throw new IllegalArgumentException("FILTER doc is < spansdoc!!!");
} else {
throw new IllegalArgumentException("Something horrible happened");
}