热门标签 | 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



推荐阅读
  • 在MFC框架中,存在多个全局函数,用于在不同对象间获取信息或创建新对象。其中,`afxGetApp`函数尤为关键,它能够帮助开发者轻松获取当前应用程序的实例指针。本文将详细解析`afxGetApp`函数的内部机制及其在MFC应用程序中的具体应用场景,探讨其在提升代码可维护性和灵活性方面的优势。此外,还将介绍其他常用全局函数如`AfxWinInit()`和`AfxBeginThread()`的功能和使用方法,为开发者提供全面的参考。 ... [详细]
  • 本文深入探讨了C#中的反射与特性功能。首先,介绍了反射的基本概念,即通过元数据(包括类的方法、属性和字段等)在运行时动态获取和操作程序信息的能力。此外,还详细解析了特性的使用方法及其在代码注解和元数据扩展中的重要作用,为开发者提供了丰富的编程技巧和实践指导。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 在本文中,我们将深入探讨C#中的构造函数及其应用场景。通过引入构造函数,可以有效解决在访问类属性时反复赋值导致的代码冗余问题,提高代码的可读性和维护性。此外,还将介绍构造函数的不同类型及其在实际开发中的最佳实践。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
  • 如何正确配置Log4j以优化日志记录效果? ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 在Adobe After Effects中,通过高效添加地图指北针,可以显著提升地理信息的准确性和视觉效果。本文介绍了一种方法,利用代码函数 `public static void ExportMapEx(string filepath, int resolution, AxMapControl curMapControl)`,实现地图导出时自动添加指北针,确保地理数据的精确性和一致性。此外,还详细探讨了如何优化指北针的位置和样式,以增强地图的可读性和专业性。 ... [详细]
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社区 版权所有