`
longzhun
  • 浏览: 371691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分页检索及完善站内搜索

 
阅读更多
	public static final int pageSize = 5; //每页显示多少条记录
	private int pageNum;//当前页码
	private int totalPageSize;//总页数

 

/**
	 * 通过关键词 得到结果
	 */

	public void searchIndex(String path, String keywords) throws Exception {
		long startTime = new Date().getTime();
		 
		
		FSDirectory directory = FSDirectory.open(new File(path));
		IndexReader reader = IndexReader.open(directory);

		Searcher searcher = new IndexSearcher(directory);

		// MultiFieldQueryParser.parse中的参数分别为:
		// 1.关键词
		// 2.要查询的字段,字符串类型的数组
		String[] field = { "article_title", "article_content" };
		// 3.两个字段的关系(与或非)
		BooleanClause.Occur[] flags = new BooleanClause.Occur[] {
				BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
		// 4.指明分词的时候所用的分词器
		Analyzer analyzer = new IKAnalyzer();
		// Query query = MultiFieldQueryParser.parse(keywords, field, flags,
		// analyzer);
		Query query = MultiFieldQueryParser.parse(Version.LUCENE_30, keywords,
				field, flags, analyzer);
		// 由于我们目前使用的查询是多字段查询,需要匹配度的排序
		// QueryScorer内置计分器
		query.rewrite(reader);// 用于重写query对象,目的能够让计分器识别当前的query.

		// 获得结果集
		// Hits hits = searcher.search(query);
		TopFieldCollector tc = TopFieldCollector.create(Sort.INDEXORDER, 20000, false, false, false, false);
		//TopDocs hits = searcher.search(query,20000);
		searcher.search(query, tc);
		if(pageNum > 0 ){
			pageNum -= 1;
		}
		TopDocs hits = tc.topDocs(pageNum * pageSize);
		
		this.maxResultSize = String.valueOf(tc.getTotalHits());
		if(tc.getTotalHits()%this.pageSize == 0){
			this.totalPageSize = tc.getTotalHits()/this.pageSize;
		}else{
			this.totalPageSize = tc.getTotalHits()/this.pageSize + 1;
		}
		
		for (int i = 0; i < hits.scoreDocs.length&&i < this.pageSize ; i++) {

			ScoreDoc sdoc = hits.scoreDocs[i];
			Document doc = searcher.doc(sdoc.doc);
			Article article = new Article();
			article.setId(Integer.valueOf(doc.get("id")));
			article.setIsCreate(String.valueOf(doc.get("isCreate")).toCharArray()[0]);
			// title
			String title = doc.get("article_title");
			// content
			String content = doc.get("article_content");
			// 以上两项需要加亮

			// Highlighter的构造函数中需要添加两个参数
			// 1.高亮文字的格式(这个格式是基于html)
			SimpleHTMLFormatter simpleHTMLFOrmatter = new SimpleHTMLFormatter(
					"<font color=red>", "</font>");
			// 2.计分器
			Highlighter highlighter = new Highlighter(simpleHTMLFOrmatter,
					new QueryScorer(query));

			// 关键字附近字符串的截取,截取120个字
			Fragmenter fragmenter = new SimpleFragmenter(120);
			highlighter.setTextFragmenter(fragmenter);

			// 针对某个字段的加亮以及截取
			TokenStream tokenStream = analyzer.tokenStream("article_content",
					new StringReader(content));
			// 将加亮并截取的字符串取出来
			String highLightText = highlighter.getBestFragment(tokenStream,
					content);

			article.setArticleContent(highLightText);

			// 针对某个字段的加亮以及截取
			TokenStream title_tokenStream = analyzer.tokenStream(
					"article_title", new StringReader(title));
			// 将加亮并截取的字符串取出来
			String title_highLightText = highlighter.getBestFragment(
					title_tokenStream, title);
			article.setArticleTitle(title_highLightText);

			searcheResult.add(article);
		}
		reader.close();
			}

 

   <s:bean name="org.apache.struts2.util.Counter" id="counter">
		<s:param name="first" value="1"/>
		<s:param name="last" value="#request.totalPageSize"/>
			<s:iterator>
				<span style="cursor:pointer;color:blue;" onclick="submitForm('${current - 1}')"><u>[${current - 1}]</u></span>
			</s:iterator>
   </s:bean>

 

 

给 标题和正文加连接

<s:iterator value="#request.searcheResult" id="article">
		<a href="${article.id}_${article.isCreate}.html" target="_blank">${article.articleTitle}</a><br/>
		${article.articleContent}...
		<br/><br/><br/>
	</s:iterator>

 

分享到:
评论

相关推荐

    java连接elasticsearch将搜索结果高亮显示并分页。

    java连接elasticsearch实现全文检索,并且高亮显示结果,实现分页。项目基于elasticsearch5.6.1可根据自己实际情况调整版本。最近项目需要所以学习了一下,项目很简单可以根据你的实际情况更改接口。我本地的搜索是...

    lucene第一步---6.分页

    本篇文章将带你迈出使用Lucene的第一步,重点关注如何实现分页检索,这对于构建高效、用户友好的搜索系统至关重要。 Lucene的核心功能包括文档索引、查询解析和结果排序。在分页检索方面,我们需要考虑如何有效地...

    过滤敏感词及无刷新分页

    总的来说,这些技术组合在一起,可以构建一个功能完善的Web应用,包括高效的数据分页、严格的敏感词过滤、便捷的数据导入导出以及安全的用户权限管理。理解并掌握这些技术,对于提升Web应用的用户体验和安全性至关...

    autoSearch 基于Lucene.Net的站内搜索

    总的来说,Lucene.Net为C#开发者提供了强大的站内搜索工具,通过理解和掌握其工作原理及API,可以构建出满足各种需求的高效搜索系统。在实践中,不断迭代和完善,才能真正发挥其潜力,为用户提供出色的搜索体验。

    自己写的lucene分页高亮显示代码

    在搜索引擎技术中,Apache Lucene 是一个非常重要的开源全文检索库。它提供了高效、可扩展的搜索功能,被广泛应用于各种项目中。本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细...

    springmvc+mybatis+lucene4文档搜索系统(支持分页)

    在现代Web开发中,构建一个高效、功能完善的文档搜索系统是至关重要的。本项目基于SpringMVC、MyBatis和Lucene4技术栈,实现了这样一个系统,特别强调了对文档的分页查询功能,以提供流畅的用户体验。 **SpringMVC...

    搜索引擎系统设计与实现论文

    通过以上步骤,我们可以构建一个功能完善的站内搜索引擎。实际应用中,还需要考虑搜索引擎的扩展性和维护性,以及如何处理动态更新的数据。同时,对用户行为的分析和个性化搜索也是未来搜索引擎发展的重要方向。

    ASP.NET源码——[搜索链接]文献检索系统.zip

    【ASP.NET源码——[搜索链接]文献检索系统】是一个基于ASP.NET技术开发的文献检索系统,主要用于帮助用户快速、高效地查找相关的学术文献或资料。这个系统充分展示了ASP.NET框架在构建Web应用程序上的强大功能,尤其...

    formcurd是一个帮助Django项目实现快速增删改查的组件。集成了组合搜索,关键字搜索,快速排序,批量操作、分页等功能,

    总的来说,formcurd是Django开发者的一个强大助手,它通过提供全面的搜索、排序、批量操作和分页功能,以及丰富的自定义选项,使得快速构建功能完善的后台管理系统成为可能。对于任何需要处理数据密集型任务的Django...

    jQuery动态表格检索排序代码.zip

    这个压缩包包含了实现这一功能所需的全部代码资源,适合用于构建具有分页、搜索和排序功能的统计表格。 首先,让我们深入了解一下jQuery如何实现动态表格的功能。在网页上,动态表格通常用于展示大量数据,通过分页...

    ASP源码ASP局域网文件共享及检索系统的设计与开发(源代码+论文)

    本项目旨在构建一个基于ASP技术的局域网文件共享及检索系统,该系统能够有效地管理和共享局域网内的文件资源,并提供高效、准确的文件检索功能。项目的实现不仅涉及到ASP编程技术的应用,还包含了数据库设计、用户...

    asp.net搜索引擎源码完整版

    搜索引擎界面可能包含搜索框、筛选选项、分页和高亮显示搜索结果等功能。 8. **性能优化**:对于大型网站,搜索引擎需要考虑性能和可扩展性。可能包含了缓存策略、负载均衡和数据库优化等技术。 9. **安全性**:...

    微信小程序优雅的搜索框.rar

    本文将深入探讨如何在微信小程序中创建一个高效、美观且功能完善的搜索框,以满足用户对信息快速检索的需求。 首先,我们需要理解微信小程序的基础架构。微信小程序基于WXML(WeChat Markup Language)和WXSS...

    高级文件搜索引擎核心功能的实现技术.pdf

    1. **指定站点的站内查询**:用户可以直接在特定网站内进行文件搜索。 2. **结果排序**:根据时间、大小、来源站点等不同维度对搜索结果进行排序。 3. **二次查询**:在初次搜索结果的基础上进行再次查询,缩小搜索...

    织梦sql标签模糊查询+sql标签分页

    织梦CMS,全称DedeCMS,是一款基于...总之,理解和熟练运用织梦CMS的SQL标签及模糊查询、分页功能,能极大地提高网站数据管理的灵活性和用户体验。正确使用附带文档,遵循安全最佳实践,将使你的网站更强大、更安全。

    android搜索历史记录提示

    在实际项目中,我们还需要考虑一些额外的细节,比如搜索历史的清理、数据安全(加密存储)、以及搜索记录的分页显示等。此外,为了符合Android的设计规范,应确保界面的可访问性和易用性,如适配不同的屏幕尺寸,...

    资源前后端分离式分布式微服务架构项目搜索服务讲义+源码+视频

    2. **完善课程发布功能**: 在课程发布过程中自动将元数据推送到 Elasticsearch 索引,以便于后续的搜索操作。 3. **使用Logstash完成课程索引**: Logstash 是 ELK (Elasticsearch, Logstash, Kibana) 堆栈的一部分...

    iOS城市切换,拼音汉字搜索

    2. 卡片式加载:如果城市列表非常庞大,可以采用分页加载策略,只加载可视范围内的数据,提高性能。 五、用户体验 1. 键盘监听:监听键盘的返回事件,用户停止输入时,可以自动取消高亮状态或关闭搜索结果。 2. ...

    基于asp的搜索引擎开发毕业设计(源代码+论文).zip

    在此项目中,开发者利用ASP(Active Server Pages)技术构建了一个功能完善的搜索引擎,能够帮助用户在互联网上快速、准确地找到所需的信息。下面将详细解析这个项目的相关知识点。 一、ASP技术 ASP是微软开发的一...

    一个基于LUCENE搜索引擎项目例子

    在这个项目例子中,我们将深入探讨如何利用Lucene进行索引构建、查询处理以及结果排序,从而创建一个功能完善的搜索引擎。 首先,我们需要了解Lucene的基本概念。Lucene的核心功能包括文本分析、索引构建和搜索。...

Global site tag (gtag.js) - Google Analytics