2

我有一个存储客户的 Lucene 索引,该索引基本上包括一个视图模型(已存储但未编入索引的文档字段)、一个 ID(已存储并编入索引以允许查找和更新文档的字段)以及 google 涵盖的术语列表- 类似搜索(名称 Term 的多个字段实例)。术语可能是视图模型中的字段,也可能不是。

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

4

1 回答 1

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();
于 2013-04-12T20:35:06.303 回答