public class WithinPrefixTreeFilter extends AbstractVisitingPrefixTreeFilter
WITHIN
the query shape. It works by looking at cells outside of the query
shape to ensure documents there are excluded. By default, it will
examine all cells, and it's fairly slow. If you know that the indexed shapes
are never comprised of multiple disjoint parts (which also means it is not multi-valued),
then you can pass SpatialPrefixTree.getDistanceForLevel(maxLevels)
as
the queryBuffer
constructor parameter to minimally look this distance
beyond the query shape's edge. Even if the indexed shapes are sometimes
comprised of multiple disjoint parts, you might want to use this option with
a large buffer as a faster approximation with minimal false-positives.AbstractVisitingPrefixTreeFilter.VisitorTemplate, AbstractVisitingPrefixTreeFilter.VNode
AbstractPrefixTreeFilter.BaseTermsEnumTraverser
prefixGridScanLevel
detailLevel, fieldName, grid, queryShape
Constructor and Description |
---|
WithinPrefixTreeFilter(com.spatial4j.core.shape.Shape queryShape,
String fieldName,
SpatialPrefixTree grid,
int detailLevel,
int prefixGridScanLevel,
double queryBuffer)
|
Modifier and Type | Method and Description |
---|---|
protected com.spatial4j.core.shape.Shape |
bufferShape(com.spatial4j.core.shape.Shape shape,
double distErr)
Returns a new shape that is larger than shape by at distErr.
|
boolean |
equals(Object o) |
DocIdSet |
getDocIdSet(LeafReaderContext context,
Bits acceptDocs)
Creates a
DocIdSet enumerating the documents that should be
permitted in search results. |
int |
hashCode() |
String |
toString(String field)
Prints a query to a string, with
field assumed to be the
default field and omitted. |
public WithinPrefixTreeFilter(com.spatial4j.core.shape.Shape queryShape, String fieldName, SpatialPrefixTree grid, int detailLevel, int prefixGridScanLevel, double queryBuffer)
AbstractVisitingPrefixTreeFilter.AbstractVisitingPrefixTreeFilter(com.spatial4j.core.shape.Shape, String, org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree, int, int)
.
queryBuffer
is the (minimum) distance beyond the query shape edge
where non-matching documents are looked for so they can be excluded. If
-1 is used then the whole world is examined (a good default for correctness).public boolean equals(Object o)
equals
in class AbstractPrefixTreeFilter
public int hashCode()
hashCode
in class AbstractPrefixTreeFilter
public String toString(String field)
Query
field
assumed to be the
default field and omitted.protected com.spatial4j.core.shape.Shape bufferShape(com.spatial4j.core.shape.Shape shape, double distErr)
public DocIdSet getDocIdSet(LeafReaderContext context, Bits acceptDocs) throws IOException
Filter
DocIdSet
enumerating the documents that should be
permitted in search results. NOTE: null can be
returned if no documents are accepted by this Filter.
Note: This method will be called once per segment in
the index during searching. The returned DocIdSet
must refer to document IDs for that segment, not for
the top-level reader.
getDocIdSet
in class Filter
context
- a LeafReaderContext
instance opened on the index currently
searched on. Note, it is likely that the provided reader info does not
represent the whole underlying index i.e. if the index has more than
one segment the given reader only represents a single segment.
The provided context is always an atomic context, so you can call
LeafReader.fields()
on the context's reader, for example.acceptDocs
- Bits that represent the allowable docs to match (typically deleted docs
but possibly filtering other documents)null
should be returned if
the filter doesn't accept any documents otherwise internal optimization might not apply
in the case an empty DocIdSet
is returned.IOException
Copyright © 2000–2015 The Apache Software Foundation. All rights reserved.