have DocSet implement Bits interface
This commit is contained in:
parent
a21c0829c7
commit
6c552b4187
|
@ -41,7 +41,11 @@ public class AllDocSet extends DocSet {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public int length() {
|
||||
return maxDoc;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) {
|
||||
return doc < maxDoc;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,13 +36,20 @@ public class AndDocSet extends DocSet {
|
|||
this.sets = sets;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
for (DocSet s : sets) {
|
||||
if (!s.get(doc)) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
if (sets.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return sets.get(0).length();
|
||||
}
|
||||
|
||||
@Override public boolean isCacheable() {
|
||||
// not cacheable, the reason is that by default, when constructing the filter, it is not cacheable,
|
||||
// so if someone wants it to be cacheable, we might as well construct a cached version of the result
|
||||
|
|
|
@ -21,16 +21,17 @@ package org.elasticsearch.common.lucene.docset;
|
|||
|
||||
import org.apache.lucene.search.DocIdSet;
|
||||
import org.apache.lucene.search.DocIdSetIterator;
|
||||
import org.apache.lucene.util.Bits;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public abstract class DocSet extends DocIdSet {
|
||||
public abstract class DocSet extends DocIdSet implements Bits {
|
||||
|
||||
public static final DocSet EMPTY_DOC_SET = new DocSet() {
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -45,9 +46,13 @@ public abstract class DocSet extends DocIdSet {
|
|||
@Override public long sizeInBytes() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
public abstract boolean get(int doc) throws IOException;
|
||||
public abstract boolean get(int doc);
|
||||
|
||||
public abstract long sizeInBytes();
|
||||
}
|
||||
|
|
|
@ -44,11 +44,15 @@ public class FixedBitDocSet extends DocSet {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
return set.length();
|
||||
}
|
||||
|
||||
public FixedBitSet set() {
|
||||
return set;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
return set.get(doc);
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,10 @@ public abstract class GetDocSet extends DocSet {
|
|||
return 0;
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
return maxDoc;
|
||||
}
|
||||
|
||||
@Override public DocIdSetIterator iterator() throws IOException {
|
||||
return new DocIdSetIterator() {
|
||||
private int doc = -1;
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
package org.elasticsearch.common.lucene.docset;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
|
@ -40,7 +38,7 @@ public class NotDocSet extends GetDocSet {
|
|||
// return set.isCacheable();
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
return !set.get(doc);
|
||||
}
|
||||
|
||||
|
|
|
@ -45,6 +45,10 @@ public class OpenBitDocSet extends DocSet {
|
|||
this.set = new OpenBitSetDISI(disi, numBits);
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
return set.length();
|
||||
}
|
||||
|
||||
@Override public boolean isCacheable() {
|
||||
return true;
|
||||
}
|
||||
|
@ -53,7 +57,7 @@ public class OpenBitDocSet extends DocSet {
|
|||
return set;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
return set.fastGet(doc);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,13 +36,20 @@ public class OrDocSet extends DocSet {
|
|||
this.sets = sets;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
for (DocSet s : sets) {
|
||||
if (s.get(doc)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override public int length() {
|
||||
if (sets.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return sets.get(0).length();
|
||||
}
|
||||
|
||||
@Override public boolean isCacheable() {
|
||||
// not cacheable, the reason is that by default, when constructing the filter, it is not cacheable,
|
||||
// so if someone wants it to be cacheable, we might as well construct a cached version of the result
|
||||
|
|
|
@ -54,7 +54,7 @@ public class LimitFilter extends NoCacheFilter {
|
|||
this.limit = limit;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (++counter > limit) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.index.query;
|
|||
import org.apache.lucene.index.IndexReader;
|
||||
import org.apache.lucene.search.DocIdSet;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.elasticsearch.ElasticSearchIllegalArgumentException;
|
||||
import org.elasticsearch.ElasticSearchIllegalStateException;
|
||||
import org.elasticsearch.common.collect.Maps;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
|
@ -174,7 +175,7 @@ public class ScriptFilterParser implements FilterParser {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
searchScript.setNextDocId(doc);
|
||||
Object val = searchScript.run();
|
||||
if (val == null) {
|
||||
|
@ -186,7 +187,7 @@ public class ScriptFilterParser implements FilterParser {
|
|||
if (val instanceof Number) {
|
||||
return ((Number) val).longValue() != 0;
|
||||
}
|
||||
throw new IOException("Can't handle type [" + val + "] in script filter");
|
||||
throw new ElasticSearchIllegalArgumentException("Can't handle type [" + val + "] in script filter");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -381,7 +381,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ public abstract class NumericRangeFieldDataFilter<T> extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ public class GeoDistanceFilter extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -192,7 +192,7 @@ public class GeoDistanceRangeFilter extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ public class GeoPolygonFilter extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ public class InMemoryGeoBoundingBoxFilter extends Filter {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override public boolean get(int doc) throws IOException {
|
||||
@Override public boolean get(int doc) {
|
||||
if (!fieldData.hasValue(doc)) {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue