Class TaxonomyReader
TaxonomyReader is the read-only interface with which the faceted-search library uses the taxonomy during search time.
A TaxonomyReader holds a list of categories. Each category has a serial number which we call an "ordinal", and a hierarchical "path" name:
- The ordinal is an integer that starts at 0 for the first category (which is always the root category), and grows contiguously as more categories are added; Note that once a category is added, it can never be deleted.
- The path is a CategoryPath object specifying the category's position in the hierarchy.
An implementation must allow multiple readers to be active concurrently with a single writer. Readers follow so-called "point in time" semantics, i.e., a TaxonomyReader object will only see taxonomy entries which were available at the time it was created. What the writer writes is only available to (new) readers after the writer's Commit() is called.
In faceted search, two separate indices are used: the main Lucene index, and the taxonomy. Because the main index refers to the categories listed in the taxonomy, it is important to open the taxonomy after opening the main index, and it is also necessary to Reopen() the taxonomy after Reopen()ing the main index.
This order is important, otherwise it would be possible for the main index to refer to a category which is not yet visible in the old snapshot of the taxonomy. Note that it is indeed fine for the the taxonomy to be opened after the main index - even a long time after. The reason is that once a category is added to the taxonomy, it can never be changed or deleted, so there is no danger that a "too new" taxonomy not being consistent with an older index.
@lucene.experimental
Inheritance
Assembly: DistributedLucene.Net.Facet.dll
Syntax
public abstract class TaxonomyReader : IDisposable, IIdentifiableSurrogate
Constructors
Name | Description |
---|---|
TaxonomyReader() | Sole constructor. |
Fields
Name | Description |
---|---|
_disposed | |
_objectUID | |
_surrogateObject | |
closed | |
INVALID_ORDINAL | Ordinals are always non-negative, so a negative ordinal can be used to signify an error. Methods here return INVALID_ORDINAL (-1) in this case. |
ROOT_ORDINAL | The root category (the category with the empty path) always has the ordinal
0, to which we give a name ROOT_ORDINAL. |
Properties
Name | Description |
---|---|
CommitUserData | Retrieve user committed data. |
Count | Returns the number of categories in the taxonomy. Note that the number of categories returned is often slightly higher than the number of categories inserted into the taxonomy; This is because when a category is added to the taxonomy, its ancestors are also added automatically (including the root, which always get ordinal 0). |
IsDisposed | |
RefCount | Returns the current refCount for this taxonomy reader. |
Methods
Name | Description |
---|---|
DecRef() | Expert: decreases the refCount of this TaxonomyReader instance. If the refCount drops to 0 this taxonomy reader is closed. |
Dispose() | |
Dispose(Boolean) | |
DoClose() | performs the actual task of closing the resources that are used by the taxonomy reader. |
DoOpenIfChanged() | Implements the actual opening of a new TaxonomyReader instance if the taxonomy has changed. |
EnsureOpen() | Throws |
GetChildren(Int32) | Returns an iterator over the children of the given ordinal. |
GetOrdinal(String, String[]) | Returns ordinal for the dim + path. |
GetSurrogateId() | |
IncRef() | Expert: increments the refCount of this TaxonomyReader instance. RefCounts can be used to determine when a taxonomy reader can be closed safely, i.e. as soon as there are no more references. Be sure to always call a corresponding DecRef(), in a finally clause; otherwise the reader may never be disposed. |
OpenIfChanged<T>(T) | If the taxonomy has changed since the provided reader was opened, open and
return a new TaxonomyReader; else, return This method is typically far less costly than opening a fully new TaxonomyReader as it shares resources with the provided TaxonomyReader, when possible. |
TryIncRef() | Expert: increments the refCount of this TaxonomyReader
instance only if it has not been closed yet. Returns
|