package com.senseidb.clue.util;
import java.io.IOException;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.RandomAccessWeight;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.Bits;
public abstract class MatchSomeDocsQuery extends Query {
protected abstract boolean match(int docId);
@Override
public boolean equals(Object obj) {
return this == obj;
}
@Override
public int hashCode() {
return toString().hashCode();
}
@Override
public Weight createWeight(IndexSearcher searcher, boolean needsScores) {
return new RandomAccessWeight(this) {
@Override
protected Bits getMatchingDocs(LeafReaderContext context) throws IOException {
final int maxDoc = context.reader().maxDoc();
return new Bits() {
@Override
public boolean get(int index) {
return match(index);
}
@Override
public int length() {
return maxDoc;
}
};
}
};
}
}