Class WFSTCompletionLookup
- java.lang.Object
-
- org.apache.lucene.search.suggest.Lookup
-
- org.apache.lucene.search.suggest.fst.WFSTCompletionLookup
-
- All Implemented Interfaces:
Accountable
public class WFSTCompletionLookup extends Lookup implements Accountable
Suggester based on a weighted FST: it first traverses the prefix, then walks the n shortest paths to retrieve top-ranked suggestions.NOTE: Input weights must be between 0 and
Integer.MAX_VALUE, any other values will be rejected.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classWFSTCompletionLookup.WFSTInputIterator-
Nested classes/interfaces inherited from class org.apache.lucene.search.suggest.Lookup
Lookup.LookupPriorityQueue, Lookup.LookupResult
-
-
Field Summary
Fields Modifier and Type Field Description private longcountNumber of entries the lookup was built withprivate booleanexactFirstTrue if exact match suggestions should always be returned first.private FST<java.lang.Long>fstFST, weights are encoded as costs: (Integer.MAX_VALUE-weight) private DirectorytempDirprivate java.lang.StringtempFileNamePrefix(package private) static java.util.Comparator<java.lang.Long>weightComparator-
Fields inherited from class org.apache.lucene.search.suggest.Lookup
CHARSEQUENCE_COMPARATOR
-
Fields inherited from interface org.apache.lucene.util.Accountable
NULL_ACCOUNTABLE
-
-
Constructor Summary
Constructors Constructor Description WFSTCompletionLookup(Directory tempDir, java.lang.String tempFileNamePrefix)WFSTCompletionLookup(Directory tempDir, java.lang.String tempFileNamePrefix, boolean exactFirst)Creates a new suggester.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbuild(InputIterator iterator)Builds up a new internalLookuprepresentation based on the givenInputIterator.private static intdecodeWeight(long encoded)cost -> weightprivate static intencodeWeight(long value)weight -> costjava.lang.Objectget(java.lang.CharSequence key)Returns the weight associated with an input string, or null if it does not exist.java.util.Collection<Accountable>getChildResources()Returns nested resources of this class.longgetCount()Get the number of entries the lookup was built withbooleanload(DataInput input)Discard current lookup data and load it from a previously saved copy.java.util.List<Lookup.LookupResult>lookup(java.lang.CharSequence key, java.util.Set<BytesRef> contexts, boolean onlyMorePopular, int num)Look up a key and return possible completion for this key.private java.lang.LonglookupPrefix(BytesRef scratch, FST.Arc<java.lang.Long> arc)longramBytesUsed()Returns byte size of the underlying FST.booleanstore(DataOutput output)Persist the constructed lookup data to a directory.
-
-
-
Field Detail
-
fst
private FST<java.lang.Long> fst
FST, weights are encoded as costs: (Integer.MAX_VALUE-weight)
-
exactFirst
private final boolean exactFirst
True if exact match suggestions should always be returned first.
-
count
private long count
Number of entries the lookup was built with
-
tempDir
private final Directory tempDir
-
tempFileNamePrefix
private final java.lang.String tempFileNamePrefix
-
weightComparator
static final java.util.Comparator<java.lang.Long> weightComparator
-
-
Constructor Detail
-
WFSTCompletionLookup
public WFSTCompletionLookup(Directory tempDir, java.lang.String tempFileNamePrefix)
-
WFSTCompletionLookup
public WFSTCompletionLookup(Directory tempDir, java.lang.String tempFileNamePrefix, boolean exactFirst)
Creates a new suggester.- Parameters:
exactFirst-trueif suggestions that match the prefix exactly should always be returned first, regardless of score. This has no performance impact, but could result in low-quality suggestions.
-
-
Method Detail
-
build
public void build(InputIterator iterator) throws java.io.IOException
Description copied from class:LookupBuilds up a new internalLookuprepresentation based on the givenInputIterator. The implementation might re-sort the data internally.
-
store
public boolean store(DataOutput output) throws java.io.IOException
Description copied from class:LookupPersist the constructed lookup data to a directory. Optional operation.- Specified by:
storein classLookup- Parameters:
output-DataOutputto write the data to.- Returns:
- true if successful, false if unsuccessful or not supported.
- Throws:
java.io.IOException- when fatal IO error occurs.
-
load
public boolean load(DataInput input) throws java.io.IOException
Description copied from class:LookupDiscard current lookup data and load it from a previously saved copy. Optional operation.
-
lookup
public java.util.List<Lookup.LookupResult> lookup(java.lang.CharSequence key, java.util.Set<BytesRef> contexts, boolean onlyMorePopular, int num)
Description copied from class:LookupLook up a key and return possible completion for this key.- Specified by:
lookupin classLookup- Parameters:
key- lookup key. Depending on the implementation this may be a prefix, misspelling, or even infix.contexts- contexts to filter the lookup by, or null if all contexts are allowed; if the suggestion contains any of the contexts, it's a matchonlyMorePopular- return only more popular resultsnum- maximum number of results to return- Returns:
- a list of possible completions, with their relative weight (e.g. popularity)
-
lookupPrefix
private java.lang.Long lookupPrefix(BytesRef scratch, FST.Arc<java.lang.Long> arc) throws java.io.IOException
- Throws:
java.io.IOException
-
get
public java.lang.Object get(java.lang.CharSequence key)
Returns the weight associated with an input string, or null if it does not exist.
-
decodeWeight
private static int decodeWeight(long encoded)
cost -> weight
-
encodeWeight
private static int encodeWeight(long value)
weight -> cost
-
ramBytesUsed
public long ramBytesUsed()
Returns byte size of the underlying FST.- Specified by:
ramBytesUsedin interfaceAccountable
-
getChildResources
public java.util.Collection<Accountable> getChildResources()
Description copied from interface:AccountableReturns nested resources of this class. The result should be a point-in-time snapshot (to avoid race conditions).- Specified by:
getChildResourcesin interfaceAccountable- See Also:
Accountables
-
-