/** *
Database queries - computing distances, neighbors, similarities - API and general documentation.
* *The database query API is designed around the concept of prepared statements.
*When working with index structures, preprocessors, caches and external data, computing * a distance or a neighborhood is not as simple as running a constant time function. * Some functions may only be defined on a subset of the data, others can be computed much * more efficiently by performing a batch operation. When plenty of memory is available, * caching can be faster than recomputing distances all the time. And often there will be more * than one way of computing the same data * (for example by using an index or doing a linear scan).
* *Usually, these operations are invoked very often. * Even deciding which method to use at every iteration can prove quite costly when the number * of iterations becomes large. Therefore the goal is to "optimize" once, then invoke the same * handler cheaply. This can be achieved by using "prepared statements" as this would be called * in a traditional RDBMS context.
* *Prepared statements in ELKI are currently available for: *
The general process of obtaining a Query is to retrieve it from the database using: *
The query can then be evaluated on objects as needed.
* *In order to assist the database layer to choose the most suitable implementation, one should * also provide so called "hints" as available. In general, any object could be a "hint" to the * database layer (for extensibility), but the following are commonly used:
* *Please set these hints appropriately, since this can effect your algorithms performance!
* ** * @apiviz.exclude java.util.* * @apiviz.exclude de.lmu.ifi.dbs.elki.utilities.* */ /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see{@code // Get a kNN query with maxk = 10 * KNNQueryknnQuery = database.getKNNQuery(EuclideanDistanceFunction.STATIC, 10); * // run a 10NN query for each point, discarding the results * for(DBID id : database) { * knnQuery.getKNNForDBID(id, 10); * } * }