Class TraversingIndex
- java.lang.Object
-
- org.apache.jackrabbit.oak.query.index.TraversingIndex
-
- All Implemented Interfaces:
QueryIndex
public class TraversingIndex extends Object implements QueryIndex
An index that traverses over a given subtree.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.jackrabbit.oak.spi.query.QueryIndex
QueryIndex.AdvancedQueryIndex, QueryIndex.AdvanceFulltextQueryIndex, QueryIndex.FulltextQueryIndex, QueryIndex.IndexPlan, QueryIndex.NativeQueryIndex, QueryIndex.NodeAggregator, QueryIndex.OrderEntry
-
-
Constructor Summary
Constructors Constructor Description TraversingIndex()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description double
getCost(Filter filter, NodeState rootState)
Estimate the worst-case cost to query with the given filter.String
getIndexName()
Get the generic index name (normally the index type).double
getMinimumCost()
Returns the minimum cost whichQueryIndex.getCost(Filter, NodeState)
would return in the best possible case.String
getPlan(Filter filter, NodeState rootState)
Get the query plan for the given filter.boolean
isPotentiallySlow(Filter filter, NodeState rootState)
Cursor
query(Filter filter, NodeState rootState)
Query the index.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.jackrabbit.oak.spi.query.QueryIndex
getIndexName
-
-
-
-
Method Detail
-
getMinimumCost
public double getMinimumCost()
Description copied from interface:QueryIndex
Returns the minimum cost whichQueryIndex.getCost(Filter, NodeState)
would return in the best possible case.The implementation should return a static/cached value because it is called very often.
- Specified by:
getMinimumCost
in interfaceQueryIndex
- Returns:
- the minimum cost for the index
-
query
public Cursor query(Filter filter, NodeState rootState)
Description copied from interface:QueryIndex
Query the index. The returned cursor is supposed to return as few nodes as possible, but may return more nodes than necessary.An implementation should only filter the result if it can do so easily and efficiently; the query engine will verify the data again (in memory) and check for access rights.
The method is only called if this index is used for the given query and selector, which is only the case if the given index implementation returned the lowest cost for the given filter. If the implementation returned
Double.MAX_VALUE
in the getCost method for the given filter, then this method is not called. If it is still called, then it is supposed to throw an exception (as it would be an internal error of the query engine).- Specified by:
query
in interfaceQueryIndex
- Parameters:
filter
- the filterrootState
- root state of the current repository snapshot- Returns:
- a cursor to iterate over the result
-
getCost
public double getCost(Filter filter, NodeState rootState)
Description copied from interface:QueryIndex
Estimate the worst-case cost to query with the given filter. The returned cost is a value between 1 (very fast; lookup of a unique node) and the estimated number of entries to traverse, if the cursor would be fully read, and if there could in theory be one network roundtrip or disk read operation per node (this method may return a lower number if the data is known to be fully in memory).The returned value is supposed to be an estimate and doesn't have to be very accurate. Please note this method is called on each index whenever a query is run, so the method should be reasonably fast (not read any data itself, or at least not read too much data).
If an index implementation can not query the data, it has to return
Double.MAX_VALUE
.- Specified by:
getCost
in interfaceQueryIndex
- Parameters:
filter
- the filterrootState
- root state of the current repository snapshot- Returns:
- the estimated cost in number of read nodes
-
getPlan
public String getPlan(Filter filter, NodeState rootState)
Description copied from interface:QueryIndex
Get the query plan for the given filter. This method is called when running anEXPLAIN SELECT
query, or for logging purposes. The result should be human readable.- Specified by:
getPlan
in interfaceQueryIndex
- Parameters:
filter
- the filterrootState
- root state of the current repository snapshot- Returns:
- the query plan
-
getIndexName
public String getIndexName()
Description copied from interface:QueryIndex
Get the generic index name (normally the index type).- Specified by:
getIndexName
in interfaceQueryIndex
- Returns:
- the index name
-
-