`
fffddgx
  • 浏览: 38746 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

lucene整合struts2,搜索引擎的初步实现

阅读更多

构思时这样:采用3层架构

表示层:有3个jsp页面。

      1 (index.jsp):用来形成一个搜索的页面(大概弄成像google主页那种模式)

      2 (resutl.jsp):用来显示查询结果

      3 (product.jsp):用来显示产品的详细信息;

控制层:用struts2来实现,包括2个action。

      1 (search.action):用来对用户输入的信息查询,并转到result.jsp页面将查询结果返回。

      2 (product.action):用来实现产品详细信息的db查询,与转到product.jsp页面的返回。

持久层:jdbc实现产品信息的查询

index.jsp:

页面风格写成和Google差不多的样子,用post方式发送数据到后台,这里遇到了一个中文乱码问题,解决方法:

1:把index.jsp的pageEncoding 改成"gbk"

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

 

2:在webroot目录下创建struts.prpperties并写入:struts.i18n.enconing =gbk

或者在struts.xml中加入:<constant name="struts.i18n.encoding" value="gbk"></constant>

 

search.action

 

1:实现搜索功能

     1):获得页面传来的查询关键字

     2):使用lucene对传来的关键字查询,返回所有满足条件的product的id

     3):用id查询数据库返回所有product

     4):传递到result.jsp页面显示

2:实现result.jsp页面的分页功能:

1:策略:第一次返回10个结果,以后每次点击下一页或其他页码,将关键字和当前页码一起传到数据库,进行处理返回10条记录。

2:实现方法:新增size(每页显示多少条记录,10条)nowpage(现在时在第几页)pagesize(一共有多少分页)nextpage(下一页页码)

	if((nowpage*10)<id_list.size() )
			id_list = id_list.subList((nowpage-1)*10, nowpage*10);
			else id_list = id_list.subList((nowpage-1)*10, id_list.size());

 id_list为查询出的所有结果,上面的代码实现从查询出的结果中根据当前页码返回10条记录。

result.jsp

1:显示所有search.action post来的查询结果

2:实现分页 

 对于显示查询结果:采用struts2的遍历标签iterator,具体如下

	<s:iterator value="p" status="s">

			<table width="800" height="10" cellpadding="5">
				<tr>
					<td>
						<s:a href="product.action?id=%{id}">
							<font color="blue">${type } </font>
						</s:a>
					</td>
				</tr>
				<tr>
					<td>
						${summary }
					</td>
				</tr>
				<tr>
					<td>
						<font color="green" size="2	"> nature url: <a
							href="<s:property value="originalUrl" />"> <s:property
									value="originalUrl" /> </a> </font>
					</td>
				</tr>
			</table>
			<hr size="2" color="lightblue">
		</s:iterator>

 

 对于分页:采用jstl的循环标签 foreach,具体代码如下:

<c:forEach begin="1" end="${pagesize}" varStatus="vs">
				<a href="search.action?infor=${infor}&&nowpage=${vs.count }"
					id="${vs.count }">${vs.count }</a>
		</c:forEach>

		<a href="search.action?infor=${infor}&& nowpage=${nextpage}"
			id="${nextpage}">下一页</a>

 对于分页还有一个问题,就是如何知道让用户知道现在时第几页的问题:这里采用ajax中的dwr框架重后台获得nowpage并把这个链接的字变成绿色,后来出现了个意外,就改用隐藏域方法,具体关键代码如下:

	function load() {
		var hidden = dwr.util.getValue("hidden");
		var str = "<font color='green' >"+hidden+"</font>";
		document.getElementById(hidden).innerHTML=str;

	}

 

<body onload="load()">
		<input type="hidden" value=${nowpage } id="hidden" />
.....

  这样就实现了把当前页变成绿色。

product.action

1:获得reslut.jsp传递来的product id

2:根据id重db中取得product,并对其进行处理

3:转到product.jsp

对于第2 点要说明下,由于存入数据库是没有对汽车的详细参数处理,一股脑的存入了数据库,这里要通过字符串处理把车的参数分离出来具体代码

private void process(String str1, String str2, String str3) {
		StringBuffer sb = new StringBuffer();
		String[] st_list = str1.split("\n");
		// 获得 price
		sb
				.append("<table align='center' bordercolor='cadetblue' border='1' width='80%'><tr><td width='50%'><img src="
						+ this.p.getImageURI().trim()
						+ "></td><td><img src='green.png'></td></tr><tr bgcolor='lightblue'><td>厂家估价:</td>");
		sb.append("<td>" + str2 + "</td></tr>");
		sb.append("<tr bgcolor='lightblue'><td >上市时间:</td><td>" + str3+ "</td></tr>");
		// 获得其他详细参数
		for (int i = 1; i < st_list.length; i++) {
			if (st_list[i].indexOf(";") != -1) {
				String[] st1_list = st_list[i].split(";");
				for (int j = 0; j < st1_list.length; j++) {
					int beginIndex1 = st1_list[j].indexOf(":");
					if (beginIndex1 != -1) {
						String index1 = st1_list[j].substring(0, beginIndex1);
						String content1 = st1_list[j]
								.substring(beginIndex1 + 1);
						sb.append("<tr bgcolor='cornsilk'><td>" + index1
								+ "</td>");
						sb.append("<td>" + content1 + "</td>");
					} else {
						sb.append("<tr><td>" + st1_list[j] + "</td>");
					}

				}
				sb.append("</tr>");
			} else if (st_list[i].indexOf(",") != -1) {
				String[] st2_list = st_list[i].split(",");
				for (int k = 0; k < st2_list.length; k += 2) {
					sb.append("<tr bgcolor='cornsilk'><td>" + st2_list[k]
							+ "</td>");
					if (k + 1 >= st2_list.length)
						break;
					sb.append("<td>" + st2_list[k + 1] + "</td>");
				}
				sb.append("</tr>");
			} else {
				sb.append("<tr><td bgcolor='lightblue'>" + st_list[i]
						+ "</td></tr>");
			}
		}
		sb.append("</table>");
		contenthtml = sb.toString();
	}

 

这样就实现了详细参数的处理

product.jsp

仅有显示的功能

 

这样就基本实现了一个简单搜索引擎,下一步就是对搜索引擎的美化和优化

分享到:
评论

相关推荐

    基于struts2实现的lucene搜索引擎

    【基于Struts2实现的Lucene搜索引擎】是一个典型的Java Web应用程序,它整合了Apache的Lucene库,用于在Web环境中构建高效、可扩展的全文检索功能。Lucene是Java领域中广泛使用的开源全文检索库,提供了强大的文本...

    struts2+ibitas+spring+lucene 整合

    Lucene能快速地对大量数据进行全文搜索,适用于构建搜索引擎或在Web应用中添加搜索功能。 在这个"struts2+ibatis+spring+lucene 整合"项目中,开发者可能通过以下步骤进行了整合: 1. 配置Struts2、Spring和iBatis...

    Lucene与SSH2搜索功能

    在搜索功能的实现中,Spring可以帮助管理Lucene的相关组件,如索引目录、搜索引擎实例等,同时通过其强大的数据访问支持与Hibernate协同工作。 **Hibernate** 是一个对象关系映射(ORM)框架,使得Java开发者可以更...

    基于s2sh +mysql的 lucene大型网站的站内搜索实现

    标题中的“基于s2sh +mysql的 lucene大型网站的站内搜索实现”是指使用Struts2、Spring和Hibernate(通常简称为S2SH)框架与MySQL数据库相结合,利用Apache Lucene来构建一个大型网站的站内搜索引擎。这个项目旨在...

    Search Lucene JavaEE WebApp Struts2 Hibernate.zip

    《构建基于JavaEE的搜索引擎应用:Lucene、Struts2与Hibernate的整合实践》 在当今信息化社会,数据量日益增长,高效的搜索功能成为Web应用程序不可或缺的部分。本项目"Search Lucene JavaEE WebApp Struts2 ...

    Struts2.3.8整合Hibernate4.2,Spring3.2lucene 3 6 2 SSH整合1.0版

    Struts2.3.8、Hibernate4.2和Spring3.2是Java开发中的三大主流框架,它们分别负责Web层、持久层和业务层的管理,而Lucene 3.6.2则是一个强大的全文搜索引擎库。这个整合版本称为SSH整合1.0版,旨在提供一个高效、...

    spring+hibernate3+struts2+lucene

    【标题】"Spring+Hibernate3+Struts2+Lucene" 框架组合是过去在Web开发中广泛采用的一种技术栈,它整合了四个强大的开源框架,为构建高效、可扩展的企业级应用提供了坚实的基础。 Spring框架是Java企业级应用的核心...

    struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现(无jar包)

    在"struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现"这个项目中,首先你需要配置Struts2、Spring和Hibernate,确保它们能正常工作。这包括编写相应的配置文件(如struts.xml、spring-context.xml、...

    J2EE博客系统 struts2+spring+hibernate+oracle+lucene

    本篇将深入探讨一个基于J2EE的博客系统,该系统采用经典的“s2sh”整合框架,即Struts2、Spring和Hibernate,以及Oracle数据库和Lucene全文搜索引擎,旨在构建高效、稳定且功能齐全的博客平台。 首先,Struts2作为...

    基于Lucene的全文搜索引擎设计毕业设计.doc

    《基于Lucene的全文搜索引擎设计》 全文搜索引擎是现代网络信息检索的重要工具,它通过自动化的方式,高效地从海量的Web数据中检索出用户需要的信息。本设计主要围绕基于JavaWeb平台,使用Lucene框架构建的全文搜索...

    搜索篇:Struts、Lucene的Web实例

    Struts是一种经典的MVC(模型-视图-控制器)框架,用于构建Java Web应用程序,而Lucene则是一个强大的全文搜索引擎库,常用于实现网站的高效检索功能。 首先,Apache Struts是Java企业级开发中的一个关键组件,它...

    Lucene4.6+Solr4.6实战开发垂直搜索引擎视频课程

    51.搜索引擎实战(2) 52.搜索引擎实战(3) 53.搜索引擎实战(4) 54.搜索引擎实战(5) 55.搜索引擎实战(6) 56.搜索引擎实战(7) 57.搜索引擎实战(8) 58.搜索引擎实战(9) 59.搜索引擎实战(10) 60.搜索引擎实战(11) 61.搜索...

    compass-2.1.2.jar'、lucene-analyzers-2.4.0.jar、 lucene-core-2.3.0.jar、 lucene-highlighter-2.4.0.jar、 struts2-core-2.0.9.jar、 struts2-spring-plugin-2.0.9.jar、 xwork-2.0.4.jar

    使用compass+lucene实现简单的全文检索功能 里面整合了spring2.5、hibernate3.2、struts2.0,是对数据库进行全文检索的一个非常好的demo的所有jar包...对研究基于数据库检索的java开源搜索引擎的朋友有很大的参考价值

    Compass与Struts2SpringHibernate的整合示例

    Compass是一款基于Lucene的全文搜索引擎库,它简化了在Java应用中添加全文搜索功能的过程。Struts2、Spring和Hibernate则是Java开发中常见的三大框架,分别用于MVC(Model-View-Controller)架构、依赖注入和持久层...

    JAVA 全文搜索 struts2+spring+hibernte+compass整合记录

    在本项目中,"JAVA 全文搜索 struts2+spring+hibernate+compass整合记录" 是一个关于如何在Java环境下集成四个关键组件来实现全文搜索引擎的实践教程。Struts2是一个流行的MVC框架,Spring是核心的依赖注入框架,...

    ssh集成Lucene4.7demo

    在这个“ssh集成Lucene4.7demo”项目中,开发者将SSH框架与Lucene 4.7版本的全文搜索引擎进行了整合,同时还引入了IKAnalyzer作为中文分词器,以支持对中文文本的处理。这个示例项目不仅包含了基本的整合工作,还...

    基于lucene的开发JavaEE项目

    7. **分布式搜索**:对于大型JavaEE项目,单台服务器可能无法满足性能需求,这时我们可以采用Solr或Elasticsearch等基于Lucene的分布式搜索引擎,实现横向扩展和负载均衡。 8. **整合到JavaEE框架**:将Lucene集成...

    SSH2注解,Lucene全文检索,WebService整合例子。

    接下来,我们讨论Lucene,这是一个高性能、全文搜索引擎库。它允许开发者在应用程序中实现全文检索功能,为用户提供类似于Google的搜索体验。Lucene支持索引创建、更新和查询,可以处理大量文本数据。在给定的例子中...

Global site tag (gtag.js) - Google Analytics