mirror of https://github.com/apache/lucene.git
LUCENE-1427: speed up QueryWrapperFilter by not computing scores nor an intermediate OpenBitSet
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@709459 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0ee1707d9f
commit
4990152243
|
@ -12,6 +12,9 @@ API Changes
|
|||
Yet, it will give us the possibility to try out different consumers in
|
||||
in the chain. (Michael Busch)
|
||||
|
||||
2. LUCENE-1427: DocIdSet.iterator() is now allowed to throw
|
||||
IOException. (Paul Elschot, Mike McCandless)
|
||||
|
||||
Bug fixes
|
||||
|
||||
1. LUCENE-1415: MultiPhraseQuery has incorrect hashCode() and equals()
|
||||
|
@ -38,6 +41,12 @@ New features
|
|||
|
||||
Optimizations
|
||||
|
||||
1. LUCENE-1427: Fixed QueryWrapperFilter to not waste time computing
|
||||
scores of the query, since they are just discarded. Also, made it
|
||||
more efficient (single pass) by not creating & populating an
|
||||
intermediate OpenBitSet (Paul Elschot, Mike McCandless)
|
||||
|
||||
|
||||
Documentation
|
||||
|
||||
Build
|
||||
|
|
|
@ -17,11 +17,12 @@ package org.apache.lucene.search;
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* A DocIdSet contains a set of doc ids. Implementing classes must provide
|
||||
* a {@link DocIdSetIterator} to access the set.
|
||||
*/
|
||||
public abstract class DocIdSet {
|
||||
public abstract DocIdSetIterator iterator();
|
||||
public abstract DocIdSetIterator iterator() throws IOException;
|
||||
}
|
||||
|
|
|
@ -59,15 +59,13 @@ public class QueryWrapperFilter extends Filter {
|
|||
return bits;
|
||||
}
|
||||
|
||||
public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
|
||||
final OpenBitSet bits = new OpenBitSet(reader.maxDoc());
|
||||
|
||||
new IndexSearcher(reader).search(query, new HitCollector() {
|
||||
public final void collect(int doc, float score) {
|
||||
bits.set(doc); // set bit for hit
|
||||
public DocIdSet getDocIdSet(final IndexReader reader) throws IOException {
|
||||
final Weight weight = query.weight(new IndexSearcher(reader));
|
||||
return new DocIdSet() {
|
||||
public DocIdSetIterator iterator() throws IOException {
|
||||
return weight.scorer(reader);
|
||||
}
|
||||
});
|
||||
return bits;
|
||||
};
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
|
|
Loading…
Reference in New Issue