|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.lucene.facet.taxonomy.writercache.LabelToOrdinal
org.apache.lucene.facet.taxonomy.writercache.CompactLabelToOrdinal
public class CompactLabelToOrdinal
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
exceeds loadFactor
*
LabelToOrdinal.getMaxOrdinal()
. Growing also includes reinserting all colliding
labels into the HashArrays to possibly reduce the number of collisions.
For setting the loadFactor
see
CompactLabelToOrdinal(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 | |
---|---|
static float |
DefaultLoadFactor
Default maximum load factor. |
Fields inherited from class org.apache.lucene.facet.taxonomy.writercache.LabelToOrdinal |
---|
counter, INVALID_ORDINAL |
Constructor Summary | |
---|---|
CompactLabelToOrdinal(int initialCapacity,
float loadFactor,
int numHashArrays)
Sole constructor. |
Method Summary | |
---|---|
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, or LabelToOrdinal.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 |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final float DefaultLoadFactor
Constructor Detail |
---|
public CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays)
Method Detail |
---|
public int sizeOfMap()
public void addLabel(FacetLabel label, int ordinal)
LabelToOrdinal
IllegalArgumentException
if the same label with
a different ordinal was previoulsy added to this table.
addLabel
in class LabelToOrdinal
public int getOrdinal(FacetLabel label)
LabelToOrdinal
LabelToOrdinal.INVALID_ORDINAL
if the label cannot be found in this table.
getOrdinal
in class LabelToOrdinal
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |