Lucene.Net如何实现模糊查询?

meiguiyu00 2014-12-11 09:41:36

项目需要用的lucene.Net3.0+盘古分词开发全文检索的功能,根据词库将数据导出建立索引完成,搜索的时候问题来了,无法实现模糊查找,请问是哪里设置错了,有做过的帮忙解决下。。

//建立索引时
document.Add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED));
document.Add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED));

// 查询
IndexSearcher searcher = new IndexSearcher(reader);
Lucene.Net.Search.Sort sort = new Lucene.Net.Search.Sort();
Lucene.Net.Search.SortField f1= new SortField("longtime", SortField.LONG, true);
string keywords = GetKeyWords(key, new PanGuTokenizer());
sort.SetSort(new SortField[] { f1});
string[] fields = { "title" };
QueryParser queryParser = new MultiFieldQueryParser(version, fields, analyzer);
BooleanQuery bq = new BooleanQuery();
bq.Add(query, Occur.MUST);
TopDocs t_docs = searcher.Search(bq, null, 50, sort);
ScoreDoc[] docs = t_docs.ScoreDocs;
//查询时的分词函数
public static string GetKeyWords(string keywords, PanGuTokenizer ktTokenizer)
{
StringBuilder result = new StringBuilder();
ICollection<WordInfo> words = ktTokenizer.SegmentToWordInfos(keywords);
foreach(WordInfo word in words)
{
if(word == null)
{
continue
;
}
result.AppendFormat("{0}^{1}.0 ", word.Word, (int)Math.Pow(3, word.Rank));
}
return
result.ToString().Trim();
}

我想达到的效果是:我建立了“万达百货”的词典,输入“万达”、“达百”、“百货”都能匹配到“万达百货”的结果,而不是只能通过完整输入“万达百货”才能查询到。
...全文
445 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw372289iuei2010 2015-07-08
  • 打赏
  • 举报
回复
参考
http://www.xue5.com/WebDev/Site/486007.html
Term t = new Term("ProductDesc", "*" + key + "*");
WildcardQuery query = new WildcardQuery(t);
--------------------------------------------

+1
__Marlboro 2015-03-06
  • 打赏
  • 举报
回复
引用 1 楼 kongwei521 的回复:
参考 http://www.xue5.com/WebDev/Site/486007.html Term t = new Term("ProductDesc", "*" + key + "*"); WildcardQuery query = new WildcardQuery(t);
为何用WildcardQuery 查出来的数据 关键词是一个整体的单元 则会高亮,如果是某个词里的一部分 则不会高亮 这怎么处理呢? 比如说 搜“java” ,搜出来的 Javascript的 “java”没有高亮
蝶恋花雨 2014-12-11
  • 打赏
  • 举报
回复
参考 http://www.xue5.com/WebDev/Site/486007.html Term t = new Term("ProductDesc", "*" + key + "*"); WildcardQuery query = new WildcardQuery(t);

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧