messif.operations.query
Class KNNQueryOperation

java.lang.Object
  extended by messif.operations.AbstractOperation
      extended by messif.operations.QueryOperation<RankedAbstractObject>
          extended by messif.operations.RankingQueryOperation
              extended by messif.operations.query.KNNQueryOperation
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Clearable
Direct Known Subclasses:
ApproxKNNQueryOperation

public class KNNQueryOperation
extends RankingQueryOperation

K-nearest neighbors query operation. Retrieves k objects that are nearest to the specified query object (according to the distance measure).

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class messif.operations.AbstractOperation
AbstractOperation.DataEqualOperation, AbstractOperation.OperationConstructor, AbstractOperation.OperationName
 
Field Summary
protected  int k
          Number of nearest objects to retrieve
protected  LocalAbstractObject queryObject
          Query object
 
Fields inherited from class messif.operations.QueryOperation
answerType
 
Fields inherited from class messif.operations.AbstractOperation
errValue, operID, suppData
 
Constructor Summary
KNNQueryOperation(LocalAbstractObject queryObject, int k)
          Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return.
KNNQueryOperation(LocalAbstractObject queryObject, int k, AnswerType answerType)
          Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return.
KNNQueryOperation(LocalAbstractObject queryObject, int k, boolean storeMetaDistances, AnswerType answerType)
          Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return.
 
Method Summary
 void clearSurplusData()
          Clear non-messif data stored in operation.
protected  boolean dataEqualsImpl(AbstractOperation obj)
          Indicates whether some other operation has the same data as this one.
 int dataHashCode()
          Returns a hash code value for the data of this operation.
 int evaluate(AbstractObjectIterator<? extends LocalAbstractObject> objects)
          Evaluate this query on a given set of objects.
 java.lang.Object getArgument(int index)
          Returns argument that was passed while constructing instance.
 int getArgumentCount()
          Returns number of arguments that were passed while constructing this instance.
 int getK()
          Returns the number of nearest objects to retrieve.
 LocalAbstractObject getQueryObject()
          Returns the query object of this k-NN query.
 
Methods inherited from class messif.operations.RankingQueryOperation
addToAnswer, addToAnswer, clone, getAnswer, getAnswer, getAnswerClass, getAnswerCount, getAnswerDistance, getAnswerObjects, getAnswerThreshold, getLastAnswer, isAnswerFull, isStoringMetaDistances, resetAnswer, setAnswerCollection, updateFrom, updateFrom
 
Methods inherited from class messif.operations.QueryOperation
appendErrorCode, endOperation, getAnswerType, wasSuccessful
 
Methods inherited from class messif.operations.AbstractOperation
appendArguments, createOperation, dataEquals, endOperation, equals, getAnnotatedConstructor, getAnnotatedConstructor, getConstructorArgumentDescriptions, getConstructorArgumentDescriptions, getConstructorArguments, getConstructorArguments, getConstructorDescription, getErrorCode, getName, getName, getOperationID, hashCode, isFinished, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

queryObject

protected final LocalAbstractObject queryObject
Query object


k

protected final int k
Number of nearest objects to retrieve

Constructor Detail

KNNQueryOperation

public KNNQueryOperation(LocalAbstractObject queryObject,
                         int k)
Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return. Objects added to answer are updated to no-data objects.

Parameters:
queryObject - the object to which the nearest neighbors are searched
k - the number of nearest neighbors to retrieve

KNNQueryOperation

public KNNQueryOperation(LocalAbstractObject queryObject,
                         int k,
                         AnswerType answerType)
Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return.

Parameters:
queryObject - the object to which the nearest neighbors are searched
k - the number of nearest neighbors to retrieve
answerType - the type of objects this operation stores in its answer

KNNQueryOperation

public KNNQueryOperation(LocalAbstractObject queryObject,
                         int k,
                         boolean storeMetaDistances,
                         AnswerType answerType)
Creates a new instance of kNNQueryOperation for a given query object and maximal number of objects to return.

Parameters:
queryObject - the object to which the nearest neighbors are searched
k - the number of nearest neighbors to retrieve
storeMetaDistances - if true, all processed meta objects will store their sub-distances in the answer
answerType - the type of objects this operation stores in its answer
Method Detail

getQueryObject

public LocalAbstractObject getQueryObject()
Returns the query object of this k-NN query.

Returns:
the query object of this k-NN query

getK

public int getK()
Returns the number of nearest objects to retrieve.

Returns:
the number of nearest objects to retrieve

getArgument

public java.lang.Object getArgument(int index)
                             throws java.lang.IndexOutOfBoundsException
Returns argument that was passed while constructing instance. If the argument is not stored within operation, null is returned.

Overrides:
getArgument in class AbstractOperation
Parameters:
index - index of an argument passed to constructor
Returns:
argument that was passed while constructing instance
Throws:
java.lang.IndexOutOfBoundsException - if index parameter is out of range

getArgumentCount

public int getArgumentCount()
Returns number of arguments that were passed while constructing this instance.

Overrides:
getArgumentCount in class AbstractOperation
Returns:
number of arguments that were passed while constructing this instance

evaluate

public int evaluate(AbstractObjectIterator<? extends LocalAbstractObject> objects)
Evaluate this query on a given set of objects. The objects found by this evaluation are added to answer of this query via RankingQueryOperation.addToAnswer(messif.objects.LocalAbstractObject, messif.objects.LocalAbstractObject, float).

Specified by:
evaluate in class QueryOperation<RankedAbstractObject>
Parameters:
objects - the collection of objects on which to evaluate this query
Returns:
number of objects satisfying the query

clearSurplusData

public void clearSurplusData()
Clear non-messif data stored in operation. This method is intended to be called whenever the operation is sent back to client in order to minimize problems with unknown classes after deserialization.

Specified by:
clearSurplusData in interface Clearable
Overrides:
clearSurplusData in class RankingQueryOperation

dataEqualsImpl

protected boolean dataEqualsImpl(AbstractOperation obj)
Indicates whether some other operation has the same data as this one.

Specified by:
dataEqualsImpl in class AbstractOperation
Parameters:
obj - the reference object with which to compare.
Returns:
true if this object has the same data as the obj argument; false otherwise.

dataHashCode

public int dataHashCode()
Returns a hash code value for the data of this operation.

Specified by:
dataHashCode in class AbstractOperation
Returns:
a hash code value for the data of this operation