前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Boost影响Lucene查询结果的排序

利用Boost影响Lucene查询结果的排序

作者头像
菩提树下的杨过
发布2018-01-22 20:15:04
1.3K0
发布2018-01-22 20:15:04
举报

以下代码在Lucene2.1下通过,主要是通过设置Document的Boost来影响文档的权重,以达到控制查询结果顺序的目的(前提是不利用Sort排序的情况下):

代码语言:javascript
复制
private?void?btnSearch_Click(object?sender,?EventArgs?e)

????????{

????????????RAMDirectory?ramDir?=?new?RAMDirectory();

????????????IndexWriter?iw?=?new?IndexWriter(ramDir,new?StandardAnalyzer(),true);



????????????string[]?NameList?=?{?"you?are?my?friend",?"you?are?my?wife",?"I?love?you"?};

????????????string[]?FileList?=?{?"1",?"2",?"3"?};



????????????for?(int?i?=?0;?i?<?NameList.Length;?i++)

????????????{

????????????????Document?doc?=?new?Document();

????????????????doc.Add(new?Field("name",?NameList[i],?Field.Store.YES,?Field.Index.TOKENIZED));

????????????????doc.Add(new?Field("file",?FileList[i],?Field.Store.YES,?Field.Index.TOKENIZED));



????????????????if?(i?==?2)?{?doc.SetBoost(2.0f);?}//这里设置了第三个文档优先级最高,所以在搜索出来的结果中,该文档排在最前

????????????????iw.AddDocument(doc);

????????????}

????????????iw.Close();



????????????IndexSearcher?_searcher?=?new?IndexSearcher(ramDir);

????????????QueryParser?_parser?=?new?QueryParser("name",new?StandardAnalyzer());

????????????Query??_query?=?_parser.Parse("you");

????????????Hits?hitDoc?=?_searcher.Search(_query);



????????????lstResult.Items.Clear();//lstResult为一个ListBox



????????????for?(int?i?=?0;?i?<?hitDoc.Length();?i++)

????????????{

????????????????Document?doc?=?hitDoc.Doc(i);

????????????????lstResult.Items.Add(doc.Get("file")?+?"?"?+?doc.Get("name"));

????????????}????????????

????????????_searcher.Close();

????????}

以下是运行结果

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008-01-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com