извините за мой плохой английский, я могу читать лучше, чем писать;)
Я реализовал lucene.net в приложении, где iam извлекает ячейки из листа Excel в тексте и записывает их в индекс. После этого я искал в индексе фразы, содержащие около 250 букв, и записал результат в приложение. Теперь это прекрасно работает, если фраза точно такая же, как в индексе. Мой вопрос сейчас: есть ли шанс найти результаты, если будут изменены какие-либо буквы? Тем не менее, я должен найти цитаты, если кто-то удалит только одно слово в предложении.
Я использую Apache-Lucene.Net-2.9.4 и некоторую важную информацию:
//used analyzer and IndexWriter
analyzer = new Lucene.Net.Analysis.De.GermanAnalyzer();
writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
//Used Field Properties
doc.Add(new Field("id", txts.ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
doc.Add(new Field("DateiName", DateiName, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
doc.Add(new Field("postBody", text, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
for (int y = 1; y < 51; y++)
{
var queryParser = new QueryParser(Version.LUCENE_29, "postBody", analyzer);
string temquery = "\"";
temquery += sheet.Cells[y, 5].Value.ToString();
temquery += "\"";
var query = queryParser.Parse(temquery);
TopDocs resultDocs = indexSearch.Search(query, indexReader.MaxDoc());
var hits = resultDocs.ScoreDocs;
if (resultDocs.TotalHits > 0 && resultDocs.MaxScore > 1)
{
foreach (var hit in hits)
{
found = true;
var documentFromSearcher = indexSearch.Doc(hit.doc);
combineString += "Zeile: " + documentFromSearcher.Get("id") +
"\t" + documentFromSearcher.Get("DateiName") + "\t Zeile: \t" +
y.ToString() + "\r\n";
tbAusgabe.Text = combineString;
}
}
}
Я перепробовал несколько анализаторов, много читал о токенах и свойствах поля, но не нашел решения. Кто-нибудь здесь может мне помочь?