Class VisitorTemplate
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Inherited Members
Namespace: Lucene.Net.Spatial.Prefix
Assembly: Lucene.Net.Spatial.dll
Syntax
public abstract class VisitorTemplate : BaseTermsEnumTraverser
Constructors
VisitorTemplate(AbstractVisitingPrefixTreeFilter, AtomicReaderContext, IBits?, bool)
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Declaration
protected VisitorTemplate(AbstractVisitingPrefixTreeFilter outerInstance, AtomicReaderContext context, IBits? acceptDocs, bool hasIndexedLeaves)
Parameters
Type | Name | Description |
---|---|---|
AbstractVisitingPrefixTreeFilter | outerInstance | |
AtomicReaderContext | context | |
IBits | acceptDocs | |
bool | hasIndexedLeaves |
Fields
m_hasIndexedLeaves
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Declaration
protected readonly bool m_hasIndexedLeaves
Field Value
Type | Description |
---|---|
bool |
Methods
FindSubCellsToVisit(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.
Declaration
protected virtual IEnumerator<Cell> FindSubCellsToVisit(Cell cell)
Parameters
Type | Name | Description |
---|---|---|
Cell | cell |
Returns
Type | Description |
---|---|
IEnumerator<Cell> |
Exceptions
Type | Condition |
---|---|
ArgumentNullException |
|
Finish()
Called last to return the result.
Declaration
protected abstract DocIdSet Finish()
Returns
Type | Description |
---|---|
DocIdSet |
Exceptions
Type | Condition |
---|---|
IOException |
GetDocIdSet()
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Declaration
public virtual DocIdSet? GetDocIdSet()
Returns
Type | Description |
---|---|
DocIdSet |
PostSiblings(VNode)
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Declaration
protected virtual void PostSiblings(VisitorTemplate.VNode vNode)
Parameters
Type | Name | Description |
---|---|---|
VisitorTemplate.VNode | vNode |
PreSiblings(VNode)
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
Lucene.Net.Search.Filter.GetDocIdSet(Lucene.Net.Index.AtomicReaderContext, Lucene.Net.Util.IBits).
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
Lucene.Net.Util.FixedBitSet. Then it starts the traversal
process, calling FindSubCellsToVisit(Cell)
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(Cell) is called. At
some depths, of the tree, the algorithm switches to a scanning mode that
calls VisitScanned(Cell)
for each leaf cell found.
Note
This API is for internal purposes only and might change in incompatible ways in the next release.
Declaration
protected virtual void PreSiblings(VisitorTemplate.VNode vNode)
Parameters
Type | Name | Description |
---|---|---|
VisitorTemplate.VNode | vNode |
Scan(int)
Scans (termsEnum.MoveNext()
) 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(Cell).
Declaration
protected virtual void Scan(int scanDetailLevel)
Parameters
Type | Name | Description |
---|---|---|
int | scanDetailLevel |
Exceptions
Type | Condition |
---|---|
IOException |
Start()
Called first to setup things.
Declaration
protected abstract void Start()
Exceptions
Type | Condition |
---|---|
IOException |
Visit(Cell)
Visit an indexed cell returned from FindSubCellsToVisit(Cell).
Declaration
protected abstract bool Visit(Cell cell)
Parameters
Type | Name | Description |
---|---|---|
Cell | cell | An intersecting cell. |
Returns
Type | Description |
---|---|
bool | true to descend to more levels. It is an error to return true if cell.Level == detailLevel |
Exceptions
Type | Condition |
---|---|
IOException |
VisitLeaf(Cell)
Called after Visit(Cell) returns true
and an indexed leaf cell is found.
Declaration
protected abstract void VisitLeaf(Cell cell)
Parameters
Type | Name | Description |
---|---|---|
Cell | cell |
Remarks
Called after Visit(Cell) 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.
Exceptions
Type | Condition |
---|---|
IOException |
VisitScanned(Cell)
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.
Declaration
protected abstract void VisitScanned(Cell cell)
Parameters
Type | Name | Description |
---|---|---|
Cell | cell |
Exceptions
Type | Condition |
---|---|
IOException |