맞춤법 검사가 생성 된 제안의 주요 색인에 연결되지 않은 별도의 색인에서 작동하기 때문에 검색 할 필요가 있습니다. 그래도 할
쉬운 :
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();
당신의 대답은 재미 있고 쉽게 구현할 보인다. "Lucene.Net.Store.Directory 유형이 참조되지 않은 어셈블리에 정의되어 있습니다."Lucene.Net, Version = 2.0.0.4 어셈블리에 대한 참조를 추가해야합니다. 문화 = 중립, PublicKeyToken = null ' ". 및 " 'Lucene.Net.Store.RAMDirectory'에서 Lucene.Net.Store.Directory ''로 변환 할 수 없습니다. 나는 lucene.net 버전 3.0.3.0을 참조하고있다. 어떤 아이디어? – Gidi
당신이 충돌하는 어셈블리를 참조하는 것처럼 보이면 모든 참조를 제거하고 Lucene.Net 3.0.3 및 Lucene.Net 3.0.3을 가져오고 깨끗한 재 구축을 수행하십시오. Nuget에서 어셈블리를 가져 오는 것이 좋습니다. 난 너겟에서 3.0.3으로 예제를 만들었습니다. –
괜찮습니다. 나는 왜 당신이 "RAMDirectory dir = new RAMDirectory();"를 필요로하는지 이해하지 못한다. 네가 사용하는 걸 못 봤어. 인덱스 디렉토리를 가리켜 야합니까? 나는 이것 같이 그것을 시도하고 빈 결과를 돌려 보냈다. – Gidi