public class TimeLimitingCollector extends Object implements Collector
TimeLimitingCollector
is used to timeout search requests that
take longer than the maximum allowed search time limit. After this time is
exceeded, the search thread is stopped by throwing a
TimeLimitingCollector.TimeExceededException
.ExitableDirectoryReader
Modifier and Type | Class and Description |
---|---|
static class |
TimeLimitingCollector.TimeExceededException
Thrown when elapsed search time exceeds allowed search time.
|
static class |
TimeLimitingCollector.TimerThread
Thread used to timeout search requests.
|
Constructor and Description |
---|
TimeLimitingCollector(Collector collector,
Counter clock,
long ticksAllowed)
Create a TimeLimitedCollector wrapper over another
Collector with a specified timeout. |
Modifier and Type | Method and Description |
---|---|
static Counter |
getGlobalCounter()
Returns the global TimerThreads
Counter |
static TimeLimitingCollector.TimerThread |
getGlobalTimerThread()
Returns the global
TimeLimitingCollector.TimerThread . |
LeafCollector |
getLeafCollector(LeafReaderContext context)
Create a new
collector to collect the given context. |
boolean |
isGreedy()
Checks if this time limited collector is greedy in collecting the last hit.
|
ScoreMode |
scoreMode()
Indicates what features are required from the scorer.
|
void |
setBaseline()
Syntactic sugar for
setBaseline(long) using Counter.get()
on the clock passed to the constructor. |
void |
setBaseline(long clockTime)
Sets the baseline for this collector.
|
void |
setCollector(Collector collector)
This is so the same timer can be used with a multi-phase search process such as grouping.
|
void |
setGreedy(boolean greedy)
Sets whether this time limited collector is greedy.
|
public TimeLimitingCollector(Collector collector, Counter clock, long ticksAllowed)
Collector
with a specified timeout.collector
- the wrapped Collector
clock
- the timer clockticksAllowed
- max time allowed for collecting
hits after which TimeLimitingCollector.TimeExceededException
is thrownpublic void setBaseline(long clockTime)
Example usage:
Counter clock = ...; long baseline = clock.get(); // ... prepare search TimeLimitingCollector collector = new TimeLimitingCollector(c, clock, numTicks); collector.setBaseline(baseline); indexSearcher.search(query, collector);
setBaseline()
public void setBaseline()
setBaseline(long)
using Counter.get()
on the clock passed to the constructor.public boolean isGreedy()
TimeLimitingCollector.TimeExceededException
without allowing the wrapped collector to collect current doc. A greedy one would
first allow the wrapped hit collector to collect current doc and only then
throw a TimeLimitingCollector.TimeExceededException
. However, if the timeout is detected in
getLeafCollector(org.apache.lucene.index.LeafReaderContext)
then no current document is collected.setGreedy(boolean)
public void setGreedy(boolean greedy)
greedy
- true to make this time limited greedyisGreedy()
public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException
Collector
collector
to collect the given context.getLeafCollector
in interface Collector
context
- next atomic reader contextIOException
public ScoreMode scoreMode()
Collector
public void setCollector(Collector collector)
collector
- The actual collector performing search functionalitypublic static Counter getGlobalCounter()
Counter
Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread
iff
the global TimeLimitingCollector.TimerThread
has never been accessed before. The thread
returned from this method is started on creation and will be alive unless
you stop the TimeLimitingCollector.TimerThread
via TimeLimitingCollector.TimerThread.stopTimer()
.
Counter
public static TimeLimitingCollector.TimerThread getGlobalTimerThread()
TimeLimitingCollector.TimerThread
.
Invoking this creates may create a new instance of TimeLimitingCollector.TimerThread
iff
the global TimeLimitingCollector.TimerThread
has never been accessed before. The thread
returned from this method is started on creation and will be alive unless
you stop the TimeLimitingCollector.TimerThread
via TimeLimitingCollector.TimerThread.stopTimer()
.
TimeLimitingCollector.TimerThread
Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.