|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.lucene.search.suggest.Lookup org.apache.lucene.search.suggest.fst.FSTLookup
public class FSTLookup
Finite state automata based implementation of Lookup
query
suggestion/ autocomplete interface.
The construction step in build(TermFreqIterator)
works as follows:
buckets
).
Note that this means that minor changes in weights may be lost during automaton construction.
In general, this is not a big problem because the "priorities" of completions can be split
into a fixed set of classes (even as rough as: very frequent, frequent, baseline, marginal).
If you need exact, fine-grained weights, use TSTLookup
instead.abc
with a discretized weight equal '1' would
become 1abc
.FST
) is constructed from the input. The root node has
arcs labeled with all possible weights. We cache all these arcs, highest-weight first.At runtime, in lookup(String, boolean, int)
, the automaton is utilized as follows:
The algorithm described above is optimized for finding suggestions to short prefixes in a top-weights-first order. This is probably the most common use case: it allows presenting suggestions early and sorts them by the global frequency (and then alphabetically).
If there is an exact match in the automaton, it is returned first on the results list (even with by-weight sorting).
Note that the maximum lookup time for any prefix is the time of descending to the subtree, plus traversal of the subtree up to the number of requested suggestions (because they are already presorted by weight on the root level and alphabetically at any node level).
To order alphabetically only (no ordering by priorities), use identical term weights for all terms. Alphabetical suggestions are returned even if non-constant weights are used, but the algorithm for doing this is suboptimal.
"alphabetically" in any of the documentation above indicates utf16 codepoint order, nothing else.
Nested Class Summary |
---|
Nested classes/interfaces inherited from class org.apache.lucene.search.suggest.Lookup |
---|
Lookup.LookupPriorityQueue, Lookup.LookupResult |
Field Summary | |
---|---|
static String |
FILENAME
Serialized automaton file name (storage). |
Constructor Summary | |
---|---|
FSTLookup()
|
|
FSTLookup(int buckets,
boolean exactMatchFirst)
|
Method Summary | |
---|---|
boolean |
add(String key,
Object value)
Not implemented. |
void |
build(TermFreqIterator tfit)
|
Float |
get(String key)
Get the (approximated) weight of a single key (if there is a perfect match for it in the automaton). |
boolean |
load(File storeDir)
Deserialization from disk. |
List<Lookup.LookupResult> |
lookup(String key,
boolean onlyMorePopular,
int num)
Lookup autocomplete suggestions to key . |
boolean |
store(File storeDir)
Serialization to disk. |
Methods inherited from class org.apache.lucene.search.suggest.Lookup |
---|
build |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final String FILENAME
Constructor Detail |
---|
public FSTLookup()
public FSTLookup(int buckets, boolean exactMatchFirst)
Method Detail |
---|
public void build(TermFreqIterator tfit) throws IOException
build
in class Lookup
IOException
public boolean add(String key, Object value)
add
in class Lookup
key
- new lookup keyvalue
- value to associate with this key
public Float get(String key)
get
in class Lookup
key
- lookup key
null
if not found.public List<Lookup.LookupResult> lookup(String key, boolean onlyMorePopular, int num)
key
.
lookup
in class Lookup
key
- The prefix to which suggestions should be sought.onlyMorePopular
- Return most popular suggestions first. This is the default
behavior for this implementation. Setting it to false
has no effect (use
constant term weights to sort alphabetically only).num
- At most this number of suggestions will be returned.
public boolean load(File storeDir) throws IOException
load
in class Lookup
storeDir
- directory where lookup data was stored.
IOException
- when fatal IO error occurs.public boolean store(File storeDir) throws IOException
store
in class Lookup
storeDir
- directory where data can be stored.
IOException
- when fatal IO error occurs.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |