我有一个向用户提供数据的网站。我想使用 Lucene.Net 进行自动完成。问题是我希望能够返回纠正拼写错误的结果。我看到 Lucene.Net 有一个拼写检查功能,可以建议其他单词。但它会返回单词,我需要 Id 才能获取该项目的更多信息。从拼写检查器获得结果后,我是否必须对常规索引进行另一次查询,还是有更好的方法???
问问题
3256 次
1 回答
4
您将需要搜索它,因为拼写检查适用于一个单独的索引,该索引未链接到您创建的建议的主索引。
它很容易做到:
RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
Document d = new Document();
Field textField = new Field("text", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(textField);
Field idField = new Field("id", "", Field.Store.YES, Field.Index.NOT_ANALYZED);
d.Add(idField);
textField.SetValue("this is a document with a some words");
idField.SetValue("42");
iw.AddDocument(d);
iw.Commit();
IndexReader reader = iw.GetReader();
SpellChecker.Net.Search.Spell.SpellChecker speller = new SpellChecker.Net.Search.Spell.SpellChecker(new RAMDirectory());
speller.IndexDictionary(new LuceneDictionary(reader, "text"));
string [] suggestions = speller.SuggestSimilar("dcument", 5);
IndexSearcher searcher = new IndexSearcher(reader);
foreach (string suggestion in suggestions)
{
TopDocs docs = searcher.Search(new TermQuery(new Term("text", suggestion)), null, Int32.MaxValue);
foreach (var doc in docs.ScoreDocs)
{
Console.WriteLine(searcher.Doc(doc.Doc).Get("id"));
}
}
reader.Dispose();
iw.Dispose();
于 2013-05-16T15:02:22.990 回答