谷歌喜欢与Lucene.net自动提交

时间:2013-04-12 03:50:01

标签: lucene.net

我有一个Lucene索引,用于存储基本上包含视图模型的客户(存储和未编制索引的文档字段),ID(存储和索引以允许查找和更新文档的字段)以及涵盖的术语列表通过类似Google的搜索(名称为Term的多个字段实例)。术语可以是视图模型中的字段。

这适用于按术语实际搜索文档。问题是如何实现自动建议,基本上得到一个Term(字段,而不是Lucene Term)值列表,这些值可能是输入值的延续(即“Co”可能会导致“Colorado”,“Coloring Book” “等等,因为这些是至少一个Document的Term字段中的实际值。

1 个答案:

答案 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();