1

在我的应用程序中,我有一个公司,名称字段为This is a test,Lucene.Net 正确地对其进行了索引。作为参考, myMultiFieldQueryParser将其默认运算符设置为QueryParser.Operator.AND.

当我搜索this test~and时,我的搜索通过了this tst~。但是,当我尝试搜索this~ test~thas~ test~thas test~和其他变体时,我的搜索失败。

整个目的是允许用户在搜索时拼写错误,因此如果用户搜索Jon Doe它仍会显示 的结果John Doe,从而使用户不记得他们在数据库中输入的内容的确切拼写。不幸的是,它似乎只允许对搜索短语中的最后一个词进行模糊搜索。我做错了什么,还是我需要使用整个单独的分析器才能做到这一点?

4

1 回答 1

5

我最近不得不在我的项目中实现类似的东西。

我最终将短语分成多个段并手动构建查询。

var input = "This is a test";

var fieldName = "yourField";
var minimumSimilarity = 0.5f;
var prefixLength = 3;
var query = new BooleanQuery();

var segments = input.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var segment in segments)
{
    var term = new Term(fieldName, segment);
    var fuzzyQuery = new FuzzyQuery(term, minimumSimilarity, prefixLength);
    query.Add(fuzzyQuery, BooleanClause.Occur.SHOULD);
}

非常原始,我知道,但似乎工作。

注意:这仅针对 Lucene.net v2.3.1.3 进行了测试

于 2011-05-13T11:09:42.997 回答