/branches/branch-3x/src/org/getopt/luke/IntervalLimitedCollector.java
http://luke.googlecode.com/ · Java · 105 lines · 80 code · 15 blank · 10 comment · 6 complexity · e6cb8dea2a13048be71dad3f9276e4f6 MD5 · raw file
- package org.getopt.luke;
- import java.io.IOException;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.search.Scorer;
- import org.apache.lucene.search.TimeLimitingCollector;
- import org.apache.lucene.search.TopDocs;
- import org.apache.lucene.search.TopScoreDocCollector;
- import org.apache.lucene.search.TimeLimitingCollector.TimeExceededException;
- public class IntervalLimitedCollector extends LimitedHitCollector {
- private long maxTime;
- private long lastDoc = 0;
- private TopScoreDocCollector tdc;
- private TopDocs topDocs = null;
- private TimeLimitingCollector thc;
-
-
- public IntervalLimitedCollector(int maxTime, boolean outOfOrder, boolean shouldScore) {
- this.maxTime = maxTime;
- this.outOfOrder = outOfOrder;
- this.shouldScore = shouldScore;
- tdc = TopScoreDocCollector.create(1000, outOfOrder);
- thc = new TimeLimitingCollector(tdc, TimeLimitingCollector.getGlobalCounter(), maxTime);
- }
- /* (non-Javadoc)
- * @see org.getopt.luke.LimitedHitCollector#limitSize()
- */
- @Override
- public long limitSize() {
- return maxTime;
- }
- /* (non-Javadoc)
- * @see org.getopt.luke.LimitedHitCollector#limitType()
- */
- @Override
- public int limitType() {
- return TYPE_TIME;
- }
- @Override
- public int getDocId(int pos) {
- if (topDocs == null) {
- topDocs = tdc.topDocs();
- }
- return topDocs.scoreDocs[pos].doc;
- }
- /* (non-Javadoc)
- * @see org.getopt.luke.AccessibleHitCollector#getScore(int)
- */
- @Override
- public float getScore(int pos) {
- if (topDocs == null) {
- topDocs = tdc.topDocs();
- }
- return topDocs.scoreDocs[pos].score;
- }
- @Override
- public int getTotalHits() {
- return tdc.getTotalHits();
- }
- @Override
- public void collect(int docNum) throws IOException {
- try {
- thc.collect(docNum);
- } catch (TimeExceededException tee) {
- // re-throw
- throw new LimitedException(TYPE_TIME, maxTime, tee.getTimeElapsed(), tee.getLastDocCollected());
- }
- }
- @Override
- public boolean acceptsDocsOutOfOrder() {
- return outOfOrder;
- }
- @Override
- public void setNextReader(IndexReader r, int base) throws IOException {
- this.docBase = base;
- thc.setNextReader(r, base);
- }
- @Override
- public void setScorer(Scorer scorer) throws IOException {
- this.scorer = scorer;
- if (shouldScore) {
- thc.setScorer(scorer);
- } else {
- thc.setScorer(NoScoringScorer.INSTANCE);
- }
- }
- @Override
- public void reset() {
- lastDoc = 0;
- tdc = TopScoreDocCollector.create(1000, outOfOrder);
- thc = new TimeLimitingCollector(tdc, TimeLimitingCollector.getGlobalCounter(), maxTime);
- }
- }