Class CompactLabelToOrdinal
- java.lang.Object
-
- org.apache.lucene.facet.taxonomy.writercache.LabelToOrdinal
-
- org.apache.lucene.facet.taxonomy.writercache.CompactLabelToOrdinal
-
public class CompactLabelToOrdinal extends LabelToOrdinal
This is a very efficient LabelToOrdinal implementation that uses a CharBlockArray to store all labels and a configurable number of HashArrays to reference the labels.Since the HashArrays don't handle collisions, a
CollisionMap
is used to store the colliding labels.This data structure grows by adding a new HashArray whenever the number of collisions in the
CollisionMap
exceedsloadFactor
*LabelToOrdinal.getMaxOrdinal()
. Growing also includes reinserting all colliding labels into the HashArrays to possibly reduce the number of collisions. For setting theloadFactor
seeCompactLabelToOrdinal(int, float, int)
.This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels.
-
-
Field Summary
Fields Modifier and Type Field Description static float
DefaultLoadFactor
Default maximum load factor.-
Fields inherited from class org.apache.lucene.facet.taxonomy.writercache.LabelToOrdinal
INVALID_ORDINAL
-
-
Constructor Summary
Constructors Constructor Description CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays)
Sole constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addLabel(FacetLabel label, int ordinal)
Adds a new label if its not yet in the table.int
getOrdinal(FacetLabel label)
Returns the ordinal assigned to the given label, orLabelToOrdinal.INVALID_ORDINAL
if the label cannot be found in this table.int
sizeOfMap()
How many labels.-
Methods inherited from class org.apache.lucene.facet.taxonomy.writercache.LabelToOrdinal
getMaxOrdinal, getNextOrdinal
-
-
-
-
Field Detail
-
DefaultLoadFactor
public static final float DefaultLoadFactor
Default maximum load factor.- See Also:
- Constant Field Values
-
-
Method Detail
-
sizeOfMap
public int sizeOfMap()
How many labels.
-
addLabel
public void addLabel(FacetLabel label, int ordinal)
Description copied from class:LabelToOrdinal
Adds a new label if its not yet in the table. Throws anIllegalArgumentException
if the same label with a different ordinal was previoulsy added to this table.- Specified by:
addLabel
in classLabelToOrdinal
-
getOrdinal
public int getOrdinal(FacetLabel label)
Description copied from class:LabelToOrdinal
Returns the ordinal assigned to the given label, orLabelToOrdinal.INVALID_ORDINAL
if the label cannot be found in this table.- Specified by:
getOrdinal
in classLabelToOrdinal
-
-