Lucene Version : 4.4.0
SITUATION :
I need to suggest terms to the user based on a query prefix typed in a
textbox. The terms suggested should exist in the index that will be
searched. I want to suggest terms from more than one field in the
index.
I am trying to use
org.apache.lucene.search.suggest.analyzing.AnalyzingSuggester for
this.
PROBLEM :
Given the path to the index directory, I proceed as follows.
---------------------------------------------------------------
IndexReader ireader = DirectoryReader.open(FSDirectory.open(new
File(indexPath)));
List<AtomicReaderContext> readercs = ireader.leaves();
for (AtomicReaderContext readerc : readercs) {
Fields fields = readerc.reader().fields();
for (String field : fields) {
TermsEnum termsEnum = fields.terms(field).iterator(null);
tfit = new TermFreqIteratorWrapper(termsEnum); // OVERWRITE!
}
}
AnalyzingSuggester suggr = new AnalyzingSuggester(analyzer);
suggr.build(tfit);
---------------------------------------------------------------
In the line marked "OVERWRITE!", I am overwriting the term list from
one field with the term list from the next field. I want to aggregate
term lists obtained from different fields.
I could not find a way to instantiate TermFreqIterator without a
BytesRefIterator. The only way to get a BytesRefIterator seems to be
in the form of TermsEnum. Neither can be changed (i.e. appended to)
after instantiation.
How can I aggregate the TermsEnum lists from different fields so that
I can pass them together in one shot to build()? Alternatively, is
there a way to add term lists to the suggester after calling build()
once?
Thanks!
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]