Lucene.net - нужно найти похожие фразы в индексе - PullRequest
0 голосов
/ 16 февраля 2012

извините за мой плохой английский, я могу читать лучше, чем писать;)

Я реализовал 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;
        }
    }
}

Я перепробовал несколько анализаторов, много читал о токенах и свойствах поля, но не нашел решения. Кто-нибудь здесь может мне помочь?

1 Ответ

0 голосов
/ 17 февраля 2012

Вы можете использовать нечеткий запрос или запрос о близости.

Например, "foo bar"~1 будет соответствовать bar foo, а foobar~.5 будет соответствовать foobaz.

...