Lucene.net - 需要在索引中找到类似的短语

时间:2012-02-16 17:16:29

标签: lucene full-text-search lucene.net

抱歉我的英文不好,我可以读得更好然后写;)

我在一个应用程序中实现了lucene.net,其中iam从文本中的Excel工作表中提取单元格并将其写入索引中。之后,我用包含大约250个字母的短语搜索索引,并将结果写入应用程序。如果短语与索引中的完全相同,这现在可以完美地运行。我现在的问题是:如果有一些字母改变,是否有机会找到结果?如果有人只删除句子中的一个单词,我必须找到quoates。

我正在使用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 :(得分:0)

您可以使用fuzzy query或邻近查询。

例如,"foo bar"~1将匹配bar foofoobar~.5将匹配foobaz