我有一个Lucene索引,用于存储基本上包含视图模型的客户(存储和未编制索引的文档字段),ID(存储和索引以允许查找和更新文档的字段)以及涵盖的术语列表通过类似Google的搜索(名称为Term的多个字段实例)。术语可以是视图模型中的字段。
这适用于按术语实际搜索文档。问题是如何实现自动建议,基本上得到一个Term(字段,而不是Lucene Term)值列表,这些值可能是输入值的延续(即“Co”可能会导致“Colorado”,“Coloring Book” “等等,因为这些是至少一个Document的Term字段中的实际值。
答案 0 :(得分:2)
有很多方法可以做到这一点,但如果您需要一种快速而简单的方法,请使用TermEnum
。
只需将此小代码示例粘贴到新的C#控制台应用程序中,并检查它是否适合您开始使用。
RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new KeywordAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED);
Document d = new Document();
Field f = new Field("text", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(f);
f.SetValue("abc");
iw.AddDocument(d);
f.SetValue("colorado");
iw.AddDocument(d);
f.SetValue("coloring book");
iw.AddDocument(d);
iw.Commit();
IndexReader reader = iw.GetReader();
TermEnum terms = reader.Terms(new Term("text", "co"));
int maxSuggestsCpt = 0;
// will print:
// colorado
// coloring book
do
{
Console.WriteLine(terms.Term.Text);
maxSuggestsCpt++;
if (maxSuggestsCpt >= 5)
break;
}
while (terms.Next() && terms.Term.Text.StartsWith("co"));
reader.Dispose();
iw.Dispose();