您的位置:首页 > 其它

lucene 3.0 + 盘古分词 + 关键字高亮 + 分页的实现与demo

2015-01-09 11:44 441 查看
Demo,请见www.guoxuetow.com/search第一步创建索引:很简单,从数据库里查出你想要索引的数据,并调用lucene的api进行索引就行了。
staticvoidCreateIndex()
{
PanGu.Segment.Init();varservice=newLura.Gxt.Service.Sg_AuthorSummaryServiceTest();
varwriter=newIndexWriter(FSDirectory.Open(INDEX_DIR),analyzer,true,IndexWriter.MaxFieldLength.LIMITED);vartotalCount=service.GetAuthorCount();
vartotalPages=(int)Math.Ceiling(totalCount/(float)1000);
for(inti=1;i<=totalPages;i++)
{
Stopwatchsw=newStopwatch();
sw.Start();varauthorList=service.GetPagedAuthor(i);
foreach(variteminauthorList)
{
Documentdoc=newDocument();
FieldauthorId=newField("AuthorId",item.AuthorId.ToString(),Field.Store.YES,Field.Index.ANALYZED);
Fielddynasty=newField("Dynasty",SafeGetString(item.Dynasty),Field.Store.YES,Field.Index.ANALYZED);
FieldauthorName=newField("AuthorName",SafeGetString(item.AuthorName),Field.Store.YES,Field.Index.ANALYZED);
FieldauthorSummary=newField("AuthorSummary",SafeGetString(item.AuthorSummary),Field.Store.YES,Field.Index.ANALYZED);
FieldauthorSmallImage=newField("AuthorSmallImage",SafeGetString(item.AuthorSmallImage),Field.Store.YES,Field.Index.NO);
FieldauthorLargeImage=newField("AuthorLargeImage",SafeGetString(item.AuthorLargeImage),Field.Store.YES,Field.Index.NO);
Fieldstatuses=newField("Statuses",SafeGetString(item.Statuses),Field.Store.YES,Field.Index.NO);doc.Add(authorId);
doc.Add(dynasty);
doc.Add(authorName);
doc.Add(authorSummary);
doc.Add(authorSmallImage);
doc.Add(authorLargeImage);
doc.Add(statuses);writer.AddDocument(doc);
}sw.Stop();
Console.Write("建立"+authorList.Count()+"索引,花费:"+sw.Elapsed);
}writer.Optimize();
writer.Commit();
writer.Dispose();}

第二步:查询索引  
publicSearchPeopleViewSearchAuthor(stringkeyword,intpagesize,intpage)
{
varsearchPeopleView=newSearchPeopleView();if(string.IsNullOrEmpty(keyword))
returnsearchPeopleView;IndexSearchersearcher=newIndexSearcher(FSDirectory.Open(Author_INDEX_DIR),true);
QueryParserqp=newQueryParser(Lucene.Net.Util.Version.LUCENE_30,"AuthorName",analyzer);
Queryquery=qp.Parse(keyword);varcollector=TopScoreDocCollector.Create(page*pagesize,false);searcher.Search(query,collector);//开始数
intstart=pagesize*(page-1);
//结束数
intlimit=start+pagesize;ScoreDoc[]hits=collector.TopDocs(start,limit).ScoreDocs;varauthorList=newList<Author>();
foreach(ScoreDocsdinhits)
{Documentdoc=searcher.Doc(sd.Doc);
varsummaryall=doc.Get("AuthorSummary");
varsummary=summaryall.Length>300?summaryall.Substring(0,300)+"......":summaryall;varauthor=newAuthor()
{
AuthorId=Int64.Parse(doc.Get("AuthorId")),
Dynasty=doc.Get("Dynasty"),
AuthorName=doc.Get("AuthorName"),
AuthorSummary=SetHighlighter(keyword,summary),
AuthorSmallImage=doc.Get("AuthorSmallImage"),
AuthorLargeImage=doc.Get("AuthorLargeImage"),
Statuses=doc.Get("Statuses")
};authorList.Add(author);
}
searcher.Dispose();searchPeopleView.PageInfo.CurrentPage=page;
searchPeopleView.PageInfo.TotalCount=collector.TotalHits;
searchPeopleView.PageInfo.TotalPage=(int)Math.Ceiling(collector.TotalHits/(float)pagesize);//collector.TotalHits;
searchPeopleView.PeopleList=authorList;returnsearchPeopleView;
}
第三步,分页展示
<divclass="row">
<h3id="people"class="page-header">人物<small>共@(Model.PeopleView.PageInfo.TotalCount)条记录,当前第@(Model.PeopleView.PageInfo.CurrentPage)页</small></h3><ulclass="media-list">
@foreach(varpinModel.PeopleView.PeopleList)
{
<liclass="media">
<divclass="pull-left">
<ahref="/people/@p.AuthorId">
<imgwidth="50"alt="@Html.Raw(p.AuthorName)"src="@p.AuthorSmallImage"/>
</a>
</div><divclass="media-body">
<h4class="media-heading"><span>[人物]@(p.Dynasty)▪</span><ahref="/people/@p.AuthorId">@Html.Raw(@p.AuthorName)</a></h4><p>@Html.Raw(p.AuthorSummary)</p>
<ahref="/people/@p.AuthorId">www.guoxuetow.com/people/@p.AuthorId</a>
</div>
</li>
}
@if(Model.PeopleView.PeopleList.Count()==0)
{
<liclass="media">
<h4class="media-heading">没有人物记录。
</h4>
</li>
}
</ul><ulid="author-pagination"class="pagination-sm"></ul><scripttype="text/javascript">
vartotlaapage=parseInt('@(Model.PeopleView.PageInfo.TotalPage)');
varapage=parseInt('@(Model.PeopleView.PageInfo.CurrentPage)');$('#author-pagination').twbsPagination({
totalPages:totlaapage,
startPage:apage,
visiblePages:20,
href:'@Html.Raw(@authorPageUrl)',
first:'首页',
prev:'上一页',
next:'下一页',
last:'末页',
onPageClick:function(event,page){
window.location.href="@Html.Raw(@authorPageUrl1)"+page;
//$('#page-content').text('Page'+page);
}
});
</script></div>
晚上回家再写.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: