class LatLonPointDistanceComparator extends FieldComparator<java.lang.Double> implements LeafFieldComparator
When the least competitive item on the priority queue changes (setBottom), we recompute a bounding box representing competitive distance to the top-N. Then in compareBottom, we can quickly reject hits based on bounding box alone without computing distance for every element.
FieldComparator.DocComparator, FieldComparator.DoubleComparator, FieldComparator.FloatComparator, FieldComparator.IntComparator, FieldComparator.LongComparator, FieldComparator.NumericComparator<T extends java.lang.Number>, FieldComparator.RelevanceComparator, FieldComparator.TermOrdValComparator, FieldComparator.TermValComparator
Modifier and Type | Field and Description |
---|---|
(package private) double |
bottom |
(package private) SortedNumericDocValues |
currentDocs |
private long[] |
currentValues |
(package private) java.lang.String |
field |
(package private) double |
latitude |
(package private) double |
longitude |
(package private) int |
maxLat |
(package private) int |
maxLon |
(package private) int |
minLat |
(package private) int |
minLon |
(package private) int |
minLon2 |
(package private) int |
setBottomCounter |
(package private) double |
topValue |
(package private) double[] |
values |
private int |
valuesDocID |
Constructor and Description |
---|
LatLonPointDistanceComparator(java.lang.String field,
double latitude,
double longitude,
int numHits) |
Modifier and Type | Method and Description |
---|---|
int |
compare(int slot1,
int slot2)
Compare hit at slot1 with hit at slot2.
|
int |
compareBottom(int doc)
Compare the bottom of the queue with this doc.
|
int |
compareTop(int doc)
Compare the top value with this doc.
|
void |
copy(int slot,
int doc)
This method is called when a new hit is competitive.
|
LeafFieldComparator |
getLeafComparator(LeafReaderContext context)
Get a per-segment
LeafFieldComparator to collect the given
LeafReaderContext . |
(package private) static double |
haversin2(double partial) |
void |
setBottom(int slot)
Set the bottom slot, ie the "weakest" (sorted last)
entry in the queue.
|
void |
setScorer(Scorable scorer)
Sets the Scorer to use in case a document's score is
needed.
|
void |
setTopValue(java.lang.Double value)
Record the top value, for future calls to
LeafFieldComparator.compareTop(int) . |
private void |
setValues() |
(package private) double |
sortKey(int doc) |
java.lang.Double |
value(int slot)
Return the actual value in the slot.
|
compareValues
final java.lang.String field
final double latitude
final double longitude
final double[] values
double bottom
double topValue
SortedNumericDocValues currentDocs
int minLon
int maxLon
int minLat
int maxLat
int minLon2
int setBottomCounter
private long[] currentValues
private int valuesDocID
public LatLonPointDistanceComparator(java.lang.String field, double latitude, double longitude, int numHits)
public void setScorer(Scorable scorer)
LeafFieldComparator
setScorer
in interface LeafFieldComparator
scorer
- Scorer instance that you should use to
obtain the current hit's score, if necessary.public int compare(int slot1, int slot2)
FieldComparator
compare
in class FieldComparator<java.lang.Double>
slot1
- first slot to compareslot2
- second slot to compareN < 0
if slot2's value is sorted after
slot1, any N > 0
if the slot2's value is sorted before
slot1 and 0
if they are equalpublic void setBottom(int slot)
LeafFieldComparator
LeafFieldComparator.compareBottom(int)
is
called, you should compare against this slot. This
will always be called before LeafFieldComparator.compareBottom(int)
.setBottom
in interface LeafFieldComparator
slot
- the currently weakest (sorted last) slot in the queuepublic void setTopValue(java.lang.Double value)
FieldComparator
LeafFieldComparator.compareTop(int)
. This is only called for searches that
use searchAfter (deep paging), and is called before any
calls to FieldComparator.getLeafComparator(LeafReaderContext)
.setTopValue
in class FieldComparator<java.lang.Double>
private void setValues() throws java.io.IOException
java.io.IOException
public int compareBottom(int doc) throws java.io.IOException
LeafFieldComparator
FieldComparator.compare(int,int)
} as if bottom were slot1 and the new
document were slot 2.
For a search that hits many results, this method will be the hotspot (invoked by far the most frequently).
compareBottom
in interface LeafFieldComparator
doc
- that was hitN < 0
if the doc's value is sorted after
the bottom entry (not competitive), any N > 0
if the
doc's value is sorted before the bottom entry and 0
if
they are equal.java.io.IOException
public void copy(int slot, int doc) throws java.io.IOException
LeafFieldComparator
copy
in interface LeafFieldComparator
slot
- which slot to copy the hit todoc
- docID relative to current readerjava.io.IOException
public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws java.io.IOException
FieldComparator
LeafFieldComparator
to collect the given
LeafReaderContext
. All docIDs supplied to
this LeafFieldComparator
are relative to the current reader (you
must add docBase if you need to map it to a top-level docID).getLeafComparator
in class FieldComparator<java.lang.Double>
context
- current reader contextjava.io.IOException
- if there is a low-level IO errorpublic java.lang.Double value(int slot)
FieldComparator
value
in class FieldComparator<java.lang.Double>
slot
- the valuepublic int compareTop(int doc) throws java.io.IOException
LeafFieldComparator
FieldComparator.compare(int,int)
} as if topValue were slot1 and the new
document were slot 2. This is only called for searches that
use searchAfter (deep paging).compareTop
in interface LeafFieldComparator
doc
- that was hitN < 0
if the doc's value is sorted after
the top entry (not competitive), any N > 0
if the
doc's value is sorted before the top entry and 0
if
they are equal.java.io.IOException
double sortKey(int doc) throws java.io.IOException
java.io.IOException
static double haversin2(double partial)