Package org.apache.lucene.spatial.prefix
Class AbstractVisitingPrefixTreeQuery.VisitorTemplate
- java.lang.Object
-
- org.apache.lucene.spatial.prefix.AbstractPrefixTreeQuery.BaseTermsEnumTraverser
-
- org.apache.lucene.spatial.prefix.AbstractVisitingPrefixTreeQuery.VisitorTemplate
-
- Enclosing class:
- AbstractVisitingPrefixTreeQuery
public abstract class AbstractVisitingPrefixTreeQuery.VisitorTemplate extends AbstractPrefixTreeQuery.BaseTermsEnumTraverser
An abstract class designed to make it easy to implement predicates or other operations on aSpatialPrefixTreeindexed field. An instance of this class is not designed to be re-used across LeafReaderContext instances so simply create a new one per-leaf. ThegetDocIdSet()method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it callsstart()so a subclass can set up a return value, like anFixedBitSet. Then it starts the traversal process, callingfindSubCellsToVisit(org.apache.lucene.spatial.prefix.tree.Cell)which by default finds the top cells that intersectqueryShape. If there isn't an indexed cell for a corresponding cell returned for this method then it's short-circuited until it finds one, at which pointvisitPrefix(org.apache.lucene.spatial.prefix.tree.Cell)is called. At some depths, of the tree, the algorithm switches to a scanning mode that callsvisitScanned(org.apache.lucene.spatial.prefix.tree.Cell)for each leaf cell found.- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
-
Field Summary
-
Fields inherited from class org.apache.lucene.spatial.prefix.AbstractPrefixTreeQuery.BaseTermsEnumTraverser
context, maxDoc, postingsEnum, terms, termsEnum
-
-
Constructor Summary
Constructors Constructor Description VisitorTemplate(LeafReaderContext context)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected CellIteratorfindSubCellsToVisit(Cell cell)Called when doing a divide and conquer to find the next intersecting cells of the query shape that are beneathcell.protected abstract DocIdSetfinish()Called last to return the result.DocIdSetgetDocIdSet()protected voidpostSiblings(AbstractVisitingPrefixTreeQuery.VNode vNode)protected voidpreSiblings(AbstractVisitingPrefixTreeQuery.VNode vNode)protected voidscan(int scanDetailLevel)Scans (termsEnum.next()) terms until a term is found that does not start with curVNode's cell.protected abstract voidstart()Called first to setup things.protected abstract voidvisitLeaf(Cell cell)Called when an indexed leaf cell is found.protected abstract booleanvisitPrefix(Cell cell)Visit an indexed non-leaf cell.protected voidvisitScanned(Cell cell)The cell is either indexed as a leaf or is the last level of detail.-
Methods inherited from class org.apache.lucene.spatial.prefix.AbstractPrefixTreeQuery.BaseTermsEnumTraverser
collectDocs, collectDocs
-
-
-
-
Constructor Detail
-
VisitorTemplate
public VisitorTemplate(LeafReaderContext context) throws IOException
- Throws:
IOException
-
-
Method Detail
-
getDocIdSet
public DocIdSet getDocIdSet() throws IOException
- Throws:
IOException
-
findSubCellsToVisit
protected CellIterator findSubCellsToVisit(Cell cell)
Called when doing a divide and conquer to find the next intersecting cells of the query shape that are beneathcell.cellis guaranteed to have an intersection and thus this must return some number of nodes.
-
scan
protected void scan(int scanDetailLevel) throws IOExceptionScans (termsEnum.next()) terms until a term is found that does not start with curVNode's cell. If it finds a leaf cell or a cell at levelscanDetailLevelthen it callsvisitScanned(org.apache.lucene.spatial.prefix.tree.Cell).- Throws:
IOException
-
start
protected abstract void start() throws IOExceptionCalled first to setup things.- Throws:
IOException
-
finish
protected abstract DocIdSet finish() throws IOException
Called last to return the result.- Throws:
IOException
-
visitPrefix
protected abstract boolean visitPrefix(Cell cell) throws IOException
Visit an indexed non-leaf cell. The presence of a prefix cell implies there are leaf cells at further levels. The cell passed should have it'sCell.getShapeRel()set relative to the filtered shape.- Parameters:
cell- An intersecting cell; not a leaf.- Returns:
- true to descend to more levels.
- Throws:
IOException
-
visitLeaf
protected abstract void visitLeaf(Cell cell) throws IOException
Called when an indexed leaf cell is found. An indexed leaf cell usually means associated documents won't be found at further detail levels. However, if a document has multiple overlapping shapes at different resolutions, then this isn't true.- Throws:
IOException
-
visitScanned
protected void visitScanned(Cell cell) throws IOException
The cell is either indexed as a leaf or is the last level of detail. It might not even intersect the query shape, so be sure to check for that. The default implementation will check that and if passes then callvisitLeaf(org.apache.lucene.spatial.prefix.tree.Cell)orvisitPrefix(org.apache.lucene.spatial.prefix.tree.Cell).- Throws:
IOException
-
preSiblings
protected void preSiblings(AbstractVisitingPrefixTreeQuery.VNode vNode) throws IOException
- Throws:
IOException
-
postSiblings
protected void postSiblings(AbstractVisitingPrefixTreeQuery.VNode vNode) throws IOException
- Throws:
IOException
-
-