为什么在对搜索查询中的多个单词执行模糊搜索时,我的Lucene.net搜索会失败?

时间:2011-05-08 04:15:26

标签: lucene lucene.net fuzzy-search

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

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

这个目的是让用户拼错他们的搜索,所以如果用户搜索Jon Doe,它仍然会显示John Doe的结果,让用户不记得确切的拼写错误他们进入了数据库。不幸的是,它似乎只允许对搜索短语中的最后一个项进行模糊搜索。我做错了什么,或者我是否需要使用一个完整的独立分析器才能做到这一点?

1 个答案:

答案 0 :(得分: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进行了测试