热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lucene3.0+盘古分词+关键字高亮+分页的实现与demo

Demo,请见www.guoxuetow.comsearch第一步创建索引:很简单,从数据库里查出你想要索引的数据,并调用lucene的api进行索引就

Demo, 请见 www.guoxuetow.com/search

 

第一步创建索引:  很简单,从数据库里查出你想要索引的数据,并调用lucene的api进行索引就行了。

1 static void CreateIndex()
2 {
3 PanGu.Segment.Init();
4
5 var service = new Lura.Gxt.Service.Sg_AuthorSummaryServiceTest();
6 var writer = new IndexWriter(FSDirectory.Open(INDEX_DIR), analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
7
8 var totalCount = service.GetAuthorCount();
9 var totalPages = (int)Math.Ceiling(totalCount / (float)1000);
10 for (int i &#61; 1; i <&#61; totalPages; i&#43;&#43;)
11 {
12 Stopwatch sw &#61; new Stopwatch();
13 sw.Start();
14
15 var authorList &#61; service.GetPagedAuthor(i);
16 foreach (var item in authorList)
17 {
18 Document doc &#61; new Document();
19 Field authorId &#61; new Field("AuthorId", item.AuthorId.ToString(), Field.Store.YES, Field.Index.ANALYZED);
20 Field dynasty &#61; new Field("Dynasty", SafeGetString(item.Dynasty), Field.Store.YES, Field.Index.ANALYZED);
21 Field authorName &#61; new Field("AuthorName", SafeGetString(item.AuthorName), Field.Store.YES, Field.Index.ANALYZED);
22 Field authorSummary &#61; new Field("AuthorSummary", SafeGetString(item.AuthorSummary), Field.Store.YES, Field.Index.ANALYZED);
23 Field authorSmallImage &#61; new Field("AuthorSmallImage", SafeGetString(item.AuthorSmallImage), Field.Store.YES, Field.Index.NO);
24 Field authorLargeImage &#61; new Field("AuthorLargeImage", SafeGetString(item.AuthorLargeImage), Field.Store.YES, Field.Index.NO);
25 Field statuses &#61; new Field("Statuses", SafeGetString(item.Statuses), Field.Store.YES, Field.Index.NO);
26
27 doc.Add(authorId);
28 doc.Add(dynasty);
29 doc.Add(authorName);
30 doc.Add(authorSummary);
31 doc.Add(authorSmallImage);
32 doc.Add(authorLargeImage);
33 doc.Add(statuses);
34
35 writer.AddDocument(doc);
36 }
37
38 sw.Stop();
39 Console.Write("建立" &#43; authorList.Count() &#43; "索引,花费: " &#43; sw.Elapsed);
40 }
41
42 writer.Optimize();
43 writer.Commit();
44 writer.Dispose();
45
46 }

 



第二步&#xff1a; 查询索引  

1 public SearchPeopleView SearchAuthor(string keyword, int pagesize, int page)
2 {
3 var searchPeopleView &#61; new SearchPeopleView();
4
5
6 if (string.IsNullOrEmpty(keyword))
7 return searchPeopleView;
8
9 IndexSearcher searcher &#61; new IndexSearcher(FSDirectory.Open(Author_INDEX_DIR), true);
10 QueryParser qp &#61; new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "AuthorName", analyzer);
11 Query query &#61; qp.Parse(keyword);
12
13
14 var collector &#61; TopScoreDocCollector.Create(page * pagesize, false);
15
16 searcher.Search(query, collector);
17
18
19 //开始数
20 int start &#61; pagesize * (page - 1);
21 //结束数
22 int limit &#61; start &#43; pagesize;
23
24 ScoreDoc[] hits &#61; collector.TopDocs(start, limit).ScoreDocs;
25
26
27 var authorList &#61; new List();
28 foreach (ScoreDoc sd in hits)
29 {
30
31 Document doc &#61; searcher.Doc(sd.Doc);
32 var summaryall &#61; doc.Get("AuthorSummary");
33 var summary &#61; summaryall.Length> 300 ? summaryall.Substring(0,300)&#43;"......": summaryall;
34
35 var author &#61; new Author()
36 {
37 AuthorId &#61; Int64.Parse(doc.Get("AuthorId")),
38 Dynasty &#61; doc.Get("Dynasty"),
39 AuthorName &#61; doc.Get("AuthorName"),
40 AuthorSummary &#61; SetHighlighter(keyword, summary),
41 AuthorSmallImage &#61; doc.Get("AuthorSmallImage"),
42 AuthorLargeImage &#61; doc.Get("AuthorLargeImage"),
43 Statuses &#61; doc.Get("Statuses")
44 };
45
46 authorList.Add(author);
47 }
48 searcher.Dispose();
49
50
51
52 searchPeopleView.PageInfo.CurrentPage &#61; page;
53 searchPeopleView.PageInfo.TotalCount &#61; collector.TotalHits;
54 searchPeopleView.PageInfo.TotalPage &#61; (int)Math.Ceiling(collector.TotalHits / (float)pagesize);// collector.TotalHits;
55 searchPeopleView.PeopleList &#61; authorList;
56
57
58 return searchPeopleView;
59 }

 

第三步 &#xff0c;分页展示

<div class&#61;"row"><h3 id&#61;"people" class&#61;"page-header">人物 <small>共&#64;(Model.PeopleView.PageInfo.TotalCount)条记录,当前第&#64;(Model.PeopleView.PageInfo.CurrentPage)页small>h3><ul class&#61;"media-list">&#64;foreach (var p in Model.PeopleView.PeopleList){<li class&#61;"media"><div class&#61;"pull-left"><a href&#61;"/people/&#64;p.AuthorId"><img width&#61;"50" alt&#61;"&#64;Html.Raw(p.AuthorName)" src&#61;"&#64;p.AuthorSmallImage" />a>div><div class&#61;"media-body"><h4 class&#61;"media-heading"><span>[人物] &#64;(p.Dynasty)▪span><a href&#61;"/people/&#64;p.AuthorId">&#64;Html.Raw(&#64;p.AuthorName)a> h4><p>&#64;Html.Raw(p.AuthorSummary)p><a href&#61;"/people/&#64;p.AuthorId">www.guoxuetow.com/people/&#64;p.AuthorIda>div>li>}&#64;if (Model.PeopleView.PeopleList.Count() &#61;&#61; 0){<li class&#61;"media"><h4 class&#61;"media-heading">没有人物记录。h4>li>}ul><ul id&#61;"author-pagination" class&#61;"pagination-sm">ul><script type&#61;"text/Javascript">var totlaapage &#61; parseInt(&#39;&#64;(Model.PeopleView.PageInfo.TotalPage)&#39;);var apage &#61; parseInt(&#39;&#64;(Model.PeopleView.PageInfo.CurrentPage)&#39;);$(&#39;#author-pagination&#39;).twbsPagination({totalPages: totlaapage,startPage: apage,visiblePages: 20,href: &#39;&#64;Html.Raw(&#64;authorPageUrl)&#39;,first: &#39;首页&#39;,prev: &#39;上一页&#39;,next: &#39;下一页&#39;,last: &#39;末页&#39;,onPageClick: function (event, page) {window.location.href &#61; "&#64;Html.Raw(&#64;authorPageUrl1)" &#43; page;// $(&#39;#page-content&#39;).text(&#39;Page &#39; &#43; page);
}});script>div>

 

 

 

晚上回家再写.

转:https://www.cnblogs.com/zhxm/p/4212927.html



推荐阅读
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
author-avatar
洛丽塔珊珊_668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有