mirror of https://github.com/apache/lucene.git
LUCENE-1296: add protected method CachingWrapperFilter.docIdSetToCache
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@722174 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
371a33eda8
commit
278dc0fc04
|
@ -105,6 +105,10 @@ New features
|
||||||
slower first-time usage due to populating the FieldCache. (Tim
|
slower first-time usage due to populating the FieldCache. (Tim
|
||||||
Sturge via Mike McCandless)
|
Sturge via Mike McCandless)
|
||||||
|
|
||||||
|
8. LUCENE-1296: add protected method CachingWrapperFilter.docIdSetToCache
|
||||||
|
to allow subclasses to choose which DocIdSet implementation to use
|
||||||
|
(Paul Elschot via Mike McCandless)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
|
|
||||||
1. LUCENE-1427: Fixed QueryWrapperFilter to not waste time computing
|
1. LUCENE-1427: Fixed QueryWrapperFilter to not waste time computing
|
||||||
|
|
|
@ -176,8 +176,13 @@ public class ChainedFilter extends Filter
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provide a SortedVIntList when it is definitely smaller than an OpenBitSet */
|
// TODO: in 3.0, instead of removing this deprecated
|
||||||
|
// method, make it a no-op and mark it final
|
||||||
|
/** Provide a SortedVIntList when it is definitely
|
||||||
|
* smaller than an OpenBitSet
|
||||||
|
* @deprecated Either use CachingWrapperFilter, or
|
||||||
|
* switch to a different DocIdSet implementation yourself. */
|
||||||
protected DocIdSet finalResult(OpenBitSetDISI result, int maxDocs) {
|
protected DocIdSet finalResult(OpenBitSetDISI result, int maxDocs) {
|
||||||
return (result.cardinality() < (maxDocs / 9))
|
return (result.cardinality() < (maxDocs / 9))
|
||||||
? (DocIdSet) new SortedVIntList(result)
|
? (DocIdSet) new SortedVIntList(result)
|
||||||
|
|
|
@ -19,11 +19,9 @@ package org.apache.lucene.search;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.BitSet;
|
|
||||||
|
|
||||||
import org.apache.lucene.index.IndexReader;
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.search.BooleanClause.Occur;
|
import org.apache.lucene.search.BooleanClause.Occur;
|
||||||
import org.apache.lucene.util.DocIdBitSet;
|
|
||||||
import org.apache.lucene.util.OpenBitSet;
|
import org.apache.lucene.util.OpenBitSet;
|
||||||
import org.apache.lucene.util.OpenBitSetDISI;
|
import org.apache.lucene.util.OpenBitSetDISI;
|
||||||
import org.apache.lucene.util.SortedVIntList;
|
import org.apache.lucene.util.SortedVIntList;
|
||||||
|
@ -116,7 +114,12 @@ public class BooleanFilter extends Filter
|
||||||
return emptyDocIdSet;
|
return emptyDocIdSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Provide a SortedVIntList when it is definitely smaller than an OpenBitSet */
|
// TODO: in 3.0, instead of removing this deprecated
|
||||||
|
// method, make it a no-op and mark it final
|
||||||
|
/** Provide a SortedVIntList when it is definitely smaller
|
||||||
|
* than an OpenBitSet.
|
||||||
|
* @deprecated Either use CachingWrapperFilter, or
|
||||||
|
* switch to a different DocIdSet implementation yourself. */
|
||||||
protected DocIdSet finalResult(OpenBitSetDISI result, int maxDocs) {
|
protected DocIdSet finalResult(OpenBitSetDISI result, int maxDocs) {
|
||||||
return (result.cardinality() < (maxDocs / 9))
|
return (result.cardinality() < (maxDocs / 9))
|
||||||
? (DocIdSet) new SortedVIntList(result)
|
? (DocIdSet) new SortedVIntList(result)
|
||||||
|
|
|
@ -73,6 +73,14 @@ public class CachingWrapperFilter extends Filter {
|
||||||
|
|
||||||
return bits;
|
return bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Provide the DocIdSet to be cached, using the DocIdSet provided
|
||||||
|
* by the wrapped Filter.
|
||||||
|
* This implementation returns the given DocIdSet.
|
||||||
|
*/
|
||||||
|
protected DocIdSet docIdSetToCache(DocIdSet docIdSet, IndexReader reader) {
|
||||||
|
return docIdSet;
|
||||||
|
}
|
||||||
|
|
||||||
public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
|
public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
|
||||||
if (cache == null) {
|
if (cache == null) {
|
||||||
|
@ -91,7 +99,7 @@ public class CachingWrapperFilter extends Filter {
|
||||||
return new DocIdBitSet((BitSet) cached);
|
return new DocIdBitSet((BitSet) cached);
|
||||||
}
|
}
|
||||||
|
|
||||||
final DocIdSet docIdSet = filter.getDocIdSet(reader);
|
final DocIdSet docIdSet = docIdSetToCache(filter.getDocIdSet(reader), reader);
|
||||||
|
|
||||||
synchronized (cache) { // update cache
|
synchronized (cache) { // update cache
|
||||||
cache.put(reader, docIdSet);
|
cache.put(reader, docIdSet);
|
||||||
|
|
Loading…
Reference in New Issue