org.apache.lucene.spatial.prefix

## Class AbstractVisitingPrefixTreeFilter.VisitorTemplate

- java.lang.Object
- - org.apache.lucene.spatial.prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser
  - - org.apache.lucene.spatial.prefix.AbstractVisitingPrefixTreeFilter.VisitorTemplate

- Enclosing class:
    AbstractVisitingPrefixTreeFilter

      public abstract class AbstractVisitingPrefixTreeFilter.VisitorTemplate
      extends AbstractPrefixTreeFilter.BaseTermsEnumTraverser

  An abstract class designed to make it easy to implement predicates or other operations on a `SpatialPrefixTree` indexed field. An instance of this class is not designed to be re-used across AtomicReaderContext instances so simply create a new one for each call to, say a `Filter.getDocIdSet(org.apache.lucene.index.AtomicReaderContext, org.apache.lucene.util.Bits)`. The `getDocIdSet()` method here starts the work. It first checks that there are indexed terms; if not it quickly returns null. Then it calls `start()` so a subclass can set up a return value, like an `OpenBitSet`. Then it starts the traversal process, calling `findSubCellsToVisit(org.apache.lucene.spatial.prefix.tree.Node)` which by default finds the top cells that intersect `queryShape`. 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 point `visit(org.apache.lucene.spatial.prefix.tree.Node)` is called. At some depths, of the tree, the algorithm switches to a scanning mode that finds calls `visitScanned(org.apache.lucene.spatial.prefix.tree.Node, com.spatial4j.core.shape.Shape)` 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
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `hasIndexedLeaves`

    - ### Fields inherited from class org.apache.lucene.spatial.prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser

      `acceptDocs, context, docsEnum, maxDoc, termsEnum`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractVisitingPrefixTreeFilter.VisitorTemplate(AtomicReaderContext context, Bits acceptDocs, boolean hasIndexedLeaves)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Iterator<Node>` | `findSubCellsToVisit(Node cell)` Called when doing a divide & conquer to find the next intersecting cells of the query shape that are beneath `cell`.
    `protected abstract DocIdSet` | `finish()` Called last to return the result.
    `DocIdSet` | `getDocIdSet()`
    `protected void` | `postSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode)`
    `protected void` | `preSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode)`
    `protected void` | `scan(int scanDetailLevel)` Scans (`termsEnum.next()`) terms until a term is found that does not start with curVNode's cell.
    `protected abstract void` | `start()` Called first to setup things.
    `protected abstract boolean` | `visit(Node cell)` Visit an indexed cell returned from `findSubCellsToVisit(org.apache.lucene.spatial.prefix.tree.Node)`.
    `protected abstract void` | `visitLeaf(Node cell)` Called after visit() returns true and an indexed leaf cell is found.
    `protected abstract void` | `visitScanned(Node cell, com.spatial4j.core.shape.Shape cellShape)` The cell is either indexed as a leaf or is the last level of detail.

    - ### Methods inherited from class org.apache.lucene.spatial.prefix.AbstractPrefixTreeFilter.BaseTermsEnumTraverser

      `collectDocs`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### hasIndexedLeaves

          protected final boolean hasIndexedLeaves

  - ### Constructor Detail

    - #### AbstractVisitingPrefixTreeFilter.VisitorTemplate

          public AbstractVisitingPrefixTreeFilter.VisitorTemplate(AtomicReaderContext context,
                                                          Bits acceptDocs,
                                                          boolean hasIndexedLeaves)
                                                           throws IOException

      Throws:
        `IOException`

  - ### Method Detail

    - #### getDocIdSet

          public DocIdSet getDocIdSet()
                               throws IOException

      Throws:
        `IOException`

    - #### findSubCellsToVisit

          protected Iterator<Node> findSubCellsToVisit(Node cell)

      Called when doing a divide & conquer to find the next intersecting cells of the query shape that are beneath `cell`. `cell` is guaranteed to have an intersection and thus this must return some number of nodes.

    - #### scan

          protected void scan(int scanDetailLevel)
                       throws IOException

      Scans (`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 level `scanDetailLevel` then it calls `visitScanned(org.apache.lucene.spatial.prefix.tree.Node, com.spatial4j.core.shape.Shape)`.
      Throws:
        `IOException`

    - #### start

          protected abstract void start()
                                 throws IOException

      Called first to setup things.
      Throws:
        `IOException`

    - #### finish

          protected abstract DocIdSet finish()
                                      throws IOException

      Called last to return the result.
      Throws:
        `IOException`

    - #### visit

          protected abstract boolean visit(Node cell)
                                    throws IOException

      Visit an indexed cell returned from `findSubCellsToVisit(org.apache.lucene.spatial.prefix.tree.Node)`.
      Parameters:
        `cell` - An intersecting cell.
      Returns:
        true to descend to more levels. It is an error to return true if cell.level == detailLevel
      Throws:
        `IOException`

    - #### visitLeaf

          protected abstract void visitLeaf(Node cell)
                                     throws IOException

      Called after visit() returns true and an indexed leaf cell is found. An indexed leaf cell means associated documents generally won't be found at further detail levels.
      Throws:
        `IOException`

    - #### visitScanned

          protected abstract void visitScanned(Node cell,
                          com.spatial4j.core.shape.Shape cellShape)
                                        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. Use `cellShape` instead of `cell.getCellShape` for the cell's shape.
      Throws:
        `IOException`

    - #### preSiblings

          protected void preSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode)
                              throws IOException

      Throws:
        `IOException`

    - #### postSiblings

          protected void postSiblings(AbstractVisitingPrefixTreeFilter.VNode vNode)
                               throws IOException

      Throws:
        `IOException`

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.