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.
|
compareValuesfinal 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)
LeafFieldComparatorsetScorer in interface LeafFieldComparatorscorer - Scorer instance that you should use to
obtain the current hit's score, if necessary.public int compare(int slot1,
int slot2)
FieldComparatorcompare 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)
LeafFieldComparatorLeafFieldComparator.compareBottom(int) is
called, you should compare against this slot. This
will always be called before LeafFieldComparator.compareBottom(int).setBottom in interface LeafFieldComparatorslot - the currently weakest (sorted last) slot in the queuepublic void setTopValue(java.lang.Double value)
FieldComparatorLeafFieldComparator.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.IOExceptionpublic int compareBottom(int doc)
throws java.io.IOException
LeafFieldComparatorFieldComparator.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 LeafFieldComparatordoc - 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.IOExceptionpublic void copy(int slot,
int doc)
throws java.io.IOException
LeafFieldComparatorcopy in interface LeafFieldComparatorslot - which slot to copy the hit todoc - docID relative to current readerjava.io.IOExceptionpublic LeafFieldComparator getLeafComparator(LeafReaderContext context) throws java.io.IOException
FieldComparatorLeafFieldComparator 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)
FieldComparatorvalue in class FieldComparator<java.lang.Double>slot - the valuepublic int compareTop(int doc)
throws java.io.IOException
LeafFieldComparatorFieldComparator.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 LeafFieldComparatordoc - 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.IOExceptiondouble sortKey(int doc)
throws java.io.IOException
java.io.IOExceptionstatic double haversin2(double partial)