Kal*_*exx 1 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,允许用户不记得他们在数据库中输入的东西的确切拼写.不幸的是,它似乎只允许对搜索短语中的最后一个项进行模糊搜索.我做错了什么,或者我需要使用一个完整的独立分析器才能做到这一点?
我最近不得不在我的项目上实现类似的东西.
我最终将短语分成多个段并手动构建查询.
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);
}
Run Code Online (Sandbox Code Playgroud)
我知道,非常原始,但似乎工作.
注意:这仅针对Lucene.net v2.3.1.3进行了测试
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |