Class EmpiricalQueryOptimizer

  • All Implemented Interfaces:
    QueryOptimizer

    @Alias("auto")
    public class EmpiricalQueryOptimizer
    extends java.lang.Object
    implements QueryOptimizer
    Class to automatically add indexes to a database.
    Since:
    0.8.0
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.reflect.Constructor<? extends elki.index.Index> coverIndex
      cover tree index class.
      private java.lang.reflect.Constructor<? extends elki.index.Index> kdIndex
      k-d-tree index class.
      private java.lang.reflect.Constructor<? extends elki.index.KNNIndex<?>> knnIndex
      kNN preprocessor class.
      private static elki.logging.Logging LOG
      Class logger.
      private java.lang.reflect.Constructor<? extends elki.index.Index> matrixIndex
      Distance matrix index class.
      private static long MEGA
      Megabytes for formatting memory.
      private java.lang.reflect.Constructor<? extends elki.index.Index> vpIndex
      vp tree index class.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static java.lang.String formatMemory​(long mem)
      Format a memory amount.
      <O> elki.database.query.distance.DistanceQuery<O> getDistanceQuery​(elki.database.relation.Relation<? extends O> relation, elki.distance.Distance<? super O> distance, int flags)
      Optimize a distance query for this relation.
      private static long getFreeMemory()
      Get the currently free amount of memory.
      <O> elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)
      Optimize a kNN query for this relation.
      <O> elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)
      Optimize a kNN query for this relation.
      private <O> elki.index.DistancePriorityIndex<O> makeCoverTree​(elki.database.relation.Relation<? extends O> relation, elki.distance.Distance<? super O> distance, int leafsize)  
      private <O> elki.index.DistancePriorityIndex<O> makeKDTree​(elki.database.relation.Relation<? extends O> relation, elki.distance.Distance<? super O> distance, int k)  
      private <O> elki.index.KNNIndex<O> makeKnnPreprocessor​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, int maxk, int flags)
      Make a knn preprocessor.
      private <O> elki.index.DistancePriorityIndex<O> makeMatrixIndex​(elki.database.relation.Relation<? extends O> relation, elki.distance.Distance<? super O> distance)  
      private <O> elki.index.DistancePriorityIndex<O> makeVPTree​(elki.database.relation.Relation<? extends O> relation, elki.distance.Distance<? super O> distance, int leafsize)  
      <O> elki.database.query.PrioritySearcher<elki.database.ids.DBIDRef> priorityByDBID​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
      Optimize a distance priority search for this relation.
      <O> elki.database.query.PrioritySearcher<O> priorityByObject​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
      Optimize a distance priority search for this relation.
      <O> elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
      Optimize a range query for this relation.
      <O> elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.relation.Relation<? extends O> relation, elki.database.query.distance.DistanceQuery<O> distanceQuery, double maxrange, int flags)
      Optimize a range query for this relation.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final elki.logging.Logging LOG
        Class logger.
      • matrixIndex

        private final java.lang.reflect.Constructor<? extends elki.index.Index> matrixIndex
        Distance matrix index class.
      • knnIndex

        private final java.lang.reflect.Constructor<? extends elki.index.KNNIndex<?>> knnIndex
        kNN preprocessor class.
      • coverIndex

        private final java.lang.reflect.Constructor<? extends elki.index.Index> coverIndex
        cover tree index class.
      • vpIndex

        private final java.lang.reflect.Constructor<? extends elki.index.Index> vpIndex
        vp tree index class.
      • kdIndex

        private final java.lang.reflect.Constructor<? extends elki.index.Index> kdIndex
        k-d-tree index class.
    • Constructor Detail

      • EmpiricalQueryOptimizer

        public EmpiricalQueryOptimizer()
        Constructor.
    • Method Detail

      • getDistanceQuery

        public <O> elki.database.query.distance.DistanceQuery<O> getDistanceQuery​(elki.database.relation.Relation<? extends O> relation,
                                                                                  elki.distance.Distance<? super O> distance,
                                                                                  int flags)
        Description copied from interface: QueryOptimizer
        Optimize a distance query for this relation.
        Specified by:
        getDistanceQuery in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distance - Distance function
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • kNNByObject

        public <O> elki.database.query.knn.KNNSearcher<O> kNNByObject​(elki.database.relation.Relation<? extends O> relation,
                                                                      elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                      int maxk,
                                                                      int flags)
        Description copied from interface: QueryOptimizer
        Optimize a kNN query for this relation.
        Specified by:
        kNNByObject in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxk - Maximum k
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • kNNByDBID

        public <O> elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> kNNByDBID​(elki.database.relation.Relation<? extends O> relation,
                                                                                            elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                            int maxk,
                                                                                            int flags)
        Description copied from interface: QueryOptimizer
        Optimize a kNN query for this relation.
        Specified by:
        kNNByDBID in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxk - Maximum k
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • rangeByObject

        public <O> elki.database.query.range.RangeSearcher<O> rangeByObject​(elki.database.relation.Relation<? extends O> relation,
                                                                            elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                            double maxrange,
                                                                            int flags)
        Description copied from interface: QueryOptimizer
        Optimize a range query for this relation.
        Specified by:
        rangeByObject in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxrange - Maximum range
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • rangeByDBID

        public <O> elki.database.query.range.RangeSearcher<elki.database.ids.DBIDRef> rangeByDBID​(elki.database.relation.Relation<? extends O> relation,
                                                                                                  elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                                  double maxrange,
                                                                                                  int flags)
        Description copied from interface: QueryOptimizer
        Optimize a range query for this relation.
        Specified by:
        rangeByDBID in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxrange - Maximum range
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • priorityByObject

        public <O> elki.database.query.PrioritySearcher<O> priorityByObject​(elki.database.relation.Relation<? extends O> relation,
                                                                            elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                            double maxrange,
                                                                            int flags)
        Description copied from interface: QueryOptimizer
        Optimize a distance priority search for this relation.
        Specified by:
        priorityByObject in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxrange - Maximum range
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • priorityByDBID

        public <O> elki.database.query.PrioritySearcher<elki.database.ids.DBIDRef> priorityByDBID​(elki.database.relation.Relation<? extends O> relation,
                                                                                                  elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                                                                  double maxrange,
                                                                                                  int flags)
        Description copied from interface: QueryOptimizer
        Optimize a distance priority search for this relation.
        Specified by:
        priorityByDBID in interface QueryOptimizer
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxrange - Maximum range
        flags - Optimizer flags
        Returns:
        optimized query, if possible
      • makeMatrixIndex

        private <O> elki.index.DistancePriorityIndex<O> makeMatrixIndex​(elki.database.relation.Relation<? extends O> relation,
                                                                        elki.distance.Distance<? super O> distance)
      • makeCoverTree

        private <O> elki.index.DistancePriorityIndex<O> makeCoverTree​(elki.database.relation.Relation<? extends O> relation,
                                                                      elki.distance.Distance<? super O> distance,
                                                                      int leafsize)
      • makeVPTree

        private <O> elki.index.DistancePriorityIndex<O> makeVPTree​(elki.database.relation.Relation<? extends O> relation,
                                                                   elki.distance.Distance<? super O> distance,
                                                                   int leafsize)
      • makeKDTree

        private <O> elki.index.DistancePriorityIndex<O> makeKDTree​(elki.database.relation.Relation<? extends O> relation,
                                                                   elki.distance.Distance<? super O> distance,
                                                                   int k)
      • makeKnnPreprocessor

        private <O> elki.index.KNNIndex<O> makeKnnPreprocessor​(elki.database.relation.Relation<? extends O> relation,
                                                               elki.database.query.distance.DistanceQuery<O> distanceQuery,
                                                               int maxk,
                                                               int flags)
        Make a knn preprocessor.
        Type Parameters:
        O - Object type
        Parameters:
        relation - Data relation
        distanceQuery - distance query
        maxk - Maximum k
        flags - Optimizer flags
        Returns:
        knn preprocessor
      • getFreeMemory

        private static long getFreeMemory()
        Get the currently free amount of memory.
        Returns:
        Free memory
      • formatMemory

        private static java.lang.String formatMemory​(long mem)
        Format a memory amount.
        Parameters:
        mem - Memory
        Returns:
        Memory amount