Interface ITaxonomyWriter
ITaxonomyWriter is the interface which the faceted-search library uses to dynamically build the taxonomy at indexing time.
Notes about concurrent access to the taxonomy:
An implementation must allow multiple readers and a single writer to be
active concurrently. Readers follow so-called "point in time" semantics,
i.e., a reader 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
Faceted search keeps two indices - namely Lucene's main index, and this
taxonomy index. When one or more readers are active concurrently with the
writer, care must be taken to avoid an inconsistency between the state of
these two indices: When writing to the indices, the taxonomy must always
be committed to disk before the main index, because the main index
refers to categories listed in the taxonomy.
Such control can best be achieved by turning off the main index's
"autocommit" feature, and explicitly calling
Namespace: Lucene.Net.Facet.Taxonomy
Assembly: Lucene.Net.Facet.dll
Syntax
public interface ITaxonomyWriter : IDisposable, Index.ITwoPhaseCommit
Properties
| Improve this Doc View SourceCommitData
Returns the commit user data map that was set on SetCommitData(IDictionary<String, String>).
Declaration
IDictionary<string, string> CommitData { get; }
Property Value
Type | Description |
---|---|
IDictionary<System.String, System.String> |
Count
Count returns the number of categories in the taxonomy.
Because categories are numbered consecutively starting with 0, it means the taxonomy contains ordinals 0 through Count-1.
Note that the number returned by Count 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).
Declaration
int Count { get; }
Property Value
Type | Description |
---|---|
System.Int32 |
Methods
| Improve this Doc View SourceAddCategory(FacetLabel)
AddCategory(FacetLabel) adds a category with a given path name to the taxonomy, and returns its ordinal. If the category was already present in the taxonomy, its existing ordinal is returned.
Before adding a category, AddCategory(FacetLabel) makes sure that all its ancestor categories exist in the taxonomy as well. As result, the ordinal of a category is guaranteed to be smaller then the ordinal of any of its descendants.
Declaration
int AddCategory(FacetLabel categoryPath)
Parameters
Type | Name | Description |
---|---|---|
FacetLabel | categoryPath |
Returns
Type | Description |
---|---|
System.Int32 |
GetParent(Int32)
GetParent(Int32) returns the ordinal of the parent category of the category with the given ordinal.
When a category is specified as a path name, finding the path of its parent is as trivial as dropping the last component of the path. GetParent(Int32) is functionally equivalent to calling GetPath(Int32) on the given ordinal, dropping the last component of the path, and then calling GetOrdinal(FacetLabel) to get an ordinal back.
If the given ordinal is the ROOT_ORDINAL, an
INVALID_ORDINAL is returned.
If the given ordinal is a top-level category, the
ROOT_ORDINAL is returned.
If an invalid ordinal is given (negative or beyond the last available
ordinal), an
TODO (Facet): instead of a GetParent(Int32) method, consider having a GetCategory(categorypath, prefixlen) which is similar to AddCategory(FacetLabel) except it doesn't add new categories; This method can be used to get the ordinals of all prefixes of the given category, and it can use exactly the same code and cache used by AddCategory(FacetLabel) so it means less code.
Declaration
int GetParent(int ordinal)
Parameters
Type | Name | Description |
---|---|---|
System.Int32 | ordinal |
Returns
Type | Description |
---|---|
System.Int32 |
SetCommitData(IDictionary<String, String>)
Sets the commit user data map. That method is considered a transaction and
will be committed (
NOTE: the map is cloned internally, therefore altering the map's contents after calling this method has no effect.
Declaration
void SetCommitData(IDictionary<string, string> commitUserData)
Parameters
Type | Name | Description |
---|---|---|
IDictionary<System.String, System.String> | commitUserData |