Class LatLonPointDistanceComparator

  • All Implemented Interfaces:
    LeafFieldComparator

    class LatLonPointDistanceComparator
    extends FieldComparator<java.lang.Double>
    implements LeafFieldComparator
    Compares documents by distance from an origin point

    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.

    • Field Detail

      • field

        final java.lang.String field
      • latitude

        final double latitude
      • longitude

        final double longitude
      • values

        final double[] values
      • bottom

        double bottom
      • topValue

        double topValue
      • minLon

        int minLon
      • maxLon

        int maxLon
      • minLat

        int minLat
      • maxLat

        int maxLat
      • minLon2

        int minLon2
      • setBottomCounter

        int setBottomCounter
      • currentValues

        private long[] currentValues
      • valuesDocID

        private int valuesDocID
    • Constructor Detail

      • LatLonPointDistanceComparator

        public LatLonPointDistanceComparator​(java.lang.String field,
                                             double latitude,
                                             double longitude,
                                             int numHits)
    • Method Detail

      • setScorer

        public void setScorer​(Scorable scorer)
        Description copied from interface: LeafFieldComparator
        Sets the Scorer to use in case a document's score is needed.
        Specified by:
        setScorer in interface LeafFieldComparator
        Parameters:
        scorer - Scorer instance that you should use to obtain the current hit's score, if necessary.
      • compare

        public int compare​(int slot1,
                           int slot2)
        Description copied from class: FieldComparator
        Compare hit at slot1 with hit at slot2.
        Specified by:
        compare in class FieldComparator<java.lang.Double>
        Parameters:
        slot1 - first slot to compare
        slot2 - second slot to compare
        Returns:
        any N < 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 equal
      • setValues

        private void setValues()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • compareBottom

        public int compareBottom​(int doc)
                          throws java.io.IOException
        Description copied from interface: LeafFieldComparator
        Compare the bottom of the queue with this doc. This will only invoked after setBottom has been called. This should return the same result as 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).

        Specified by:
        compareBottom in interface LeafFieldComparator
        Parameters:
        doc - that was hit
        Returns:
        any N < 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.
        Throws:
        java.io.IOException
      • copy

        public void copy​(int slot,
                         int doc)
                  throws java.io.IOException
        Description copied from interface: LeafFieldComparator
        This method is called when a new hit is competitive. You should copy any state associated with this document that will be required for future comparisons, into the specified slot.
        Specified by:
        copy in interface LeafFieldComparator
        Parameters:
        slot - which slot to copy the hit to
        doc - docID relative to current reader
        Throws:
        java.io.IOException
      • value

        public java.lang.Double value​(int slot)
        Description copied from class: FieldComparator
        Return the actual value in the slot.
        Specified by:
        value in class FieldComparator<java.lang.Double>
        Parameters:
        slot - the value
        Returns:
        value in this slot
      • compareTop

        public int compareTop​(int doc)
                       throws java.io.IOException
        Description copied from interface: LeafFieldComparator
        Compare the top value with this doc. This will only invoked after setTopValue has been called. This should return the same result as 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).
        Specified by:
        compareTop in interface LeafFieldComparator
        Parameters:
        doc - that was hit
        Returns:
        any N < 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.
        Throws:
        java.io.IOException
      • sortKey

        double sortKey​(int doc)
                throws java.io.IOException
        Throws:
        java.io.IOException
      • haversin2

        static double haversin2​(double partial)