Solr实现京东搜索

使用solr实现京东网站中的商品搜索功能,

需求:

1.可以根据关键字搜索商品信息

2.可以根据商品分类、价格过滤搜索结果

3.可以根据价格排序

4.可以实现分页

源码及solrHome下载地址:csdn站内下载

界面如下:



Controller层:获取搜索条件,响应搜索结果到前台页面

service层:使用solrj调用solr的服务进行索引和搜索

dao层:不开发(数据参考solr笔记(二))

 1.配置商品图片的虚拟目录 images


我们先来分析一下product_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<!-- saved from url=(0047)http://list.jd.com/list.html?cat=1315,1343,1355 -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="utf-8" http-equiv="charset">
<link rel="stylesheet" type="text/css"
	href="<c:url value='/resource'/>/base.css" media="all">
<link rel="stylesheet" type="text/css"
	href="<c:url value='/resource'/>/plist20131112.css" media="all">
<link rel="stylesheet" type="text/css"
	href="<c:url value='/resource'/>/list-page-20141009.css" media="all">
<link rel="stylesheet" type="text/css"
	href="<c:url value='/resource'/>/pop_compare.css" media="all">
<link rel="shortcut icon" type="image/ico"
	href="http://list.jd.com/favicon.ico">
<script type="text/javascript"
	src="<c:url value='/resource'/>/jquery-1.2.6.pack.js"></script>
<style id="style-1-cropbar-clipper">/* Copyright 2014 Evernote Corporation. All rights reserved. */
.en-markup-crop-options {
    top: 18px !important;
    left: 50% !important;
    margin-left: -100px !important;
    width: 200px !important;
    border: 2px rgba(255,255,255,.38) solid !important;
    border-radius: 4px !important;
}

.en-markup-crop-options div div:first-of-type {
    margin-left: 0px !important;
}
</style>
<script type="text/javascript">
	function query() {
		//执行关键词查询时清空过滤条件
		document.getElementById("catalog_name").value="";
		document.getElementById("price").value="";
		document.getElementById("page").value="";
		//执行查询
		queryList();
	}
	function queryList() {
		//提交表单
		document.getElementById("actionForm").submit();
	}
	function filter(key, value) {
		document.getElementById(key).value=value;
		queryList();
	}
	function sort() {
		var s = document.getElementById("sort").value;
		if (s != "1") {
			s = "1";
		} else {
			s = "0";
		}
		document.getElementById("sort").value = s;
		queryList();
	}
	function changePage(p) {
		var curpage = Number(document.getElementById("page").value);
		curpage = curpage + p;
		document.getElementById("page").value = curpage;
		queryList();
	}
</script>
</head>
<body class="root61">
<div id="shortcut-2013">
	<div class="w">
		<ul class="fl lh">
			<li class="fore1 ld"><b></b><a href="#" rel="nofollow">收藏京东</a></li>
		</ul>
		<ul class="fr lh">
			<li class="fore1" id="loginbar">您好,欢迎来到京东!<span><a href="#">[登录]</a> <a href="#" class="link-regist">[免费注册]</a></span></li>
			<li class="fore2 ld">
				<s></s>
				<a href="#" rel="nofollow">我的订单</a>
			</li>
			<li class="fore2-1 ld" id="jd-vip"><i></i>
				<i></i>
				<s></s>
				<a target="_blank" rel="nofollow" href="http://vip.jd.com/">会员俱乐部</a>
			</li>
			<li class="fore2-2 ld" id="jd-dakehu">        <i></i><s></s>        <a href="http://b.jd.com/" target="_blank" rel="nofollow">企业频道</a>    </li>
			<li class="fore3 ld menu" id="app-jd" data-widget="dropdown" clstag="homepage|keycount|home2013|01d"><s></s>
				<i></i>
				<span class="outline"></span>
				<span class="blank"></span>
				<a href="http://app.jd.com/" target="_blank">手机京东</a>
				<b></b>
			</li>
			<li class="fore4 ld menu" id="biz-service" data-widget="dropdown">
				<s></s>
				<span class="outline"></span>
				<span class="blank"></span>
				客户服务
				<b></b>
			</li>
			<li class="fore5 ld menu" id="site-nav" data-widget="dropdown">
				<s></s>
				<span class="outline"></span>
				<span class="blank"></span>
				网站导航
				<b></b>
			</li>
		</ul>
		<span class="clr"></span>
	</div>
</div><!--shortcut end-->
<div id="o-header-2013">
	<div class="w" id="header-2013">
		<div id="logo-2013" class="ld"><a href="http://www.jd.com/" hidefocus="true"><b></b><img src="<c:url value='/resource'/>/logo-201305.png" width="270" height="60" alt="京东"></a></div>
		<!--logo end-->
		<div id="search-2013">
			<div class="i-search ld">
				<ul id="shelper" class="hide"></ul>
				<form id="actionForm" action="list.action" method="POST">
				<div class="form">
					<input type="text" class="text" accesskey="s" name="queryString" id="key" value="${queryString }"
						autocomplete="off" οnkeydοwn="javascript:if(event.keyCode==13) {query()}">
					<input type="button" value="搜索" class="button" οnclick="query()">
				</div>
				<input type="hidden" name="catalog_name" id="catalog_name" value="${catalog_name }"/> 
				<input type="hidden" name="price" id="price" value="${price }"/> 
				<input type="hidden" name="page" id="page" value="${result.curPage }"/> 
				<input type="hidden" name="sort" id="sort" value="${sort }"/> 
				</form>
			</div>
			<div id="hotwords"></div>
		</div>
		<!--search end-->
		<div id="my360buy-2013">
			<dl>
				<dt class="ld"><s></s><a href="http://home.jd.com/">我的京东</a><b></b></dt>
				<dd>
					<div class="loading-style1"><b></b>加载中,请稍候...</div>
				</dd>
			</dl>
		</div>
		<!--my360buy end-->
		<div id="settleup-2013">
			<dl>
				<dt class="ld"><s></s><span class="shopping"><span id="shopping-amount">0</span></span><a href="http://cart.jd.com/cart/cart.html" id="settleup-url">去购物车结算</a> <b></b> </dt>
				<dd>
					<div class="prompt">
						<div class="loading-style1"><b></b>加载中,请稍候...</div>
					</div>
				</dd>
			</dl>
		</div>
		<!--settleup end-->
	</div>
	<!--header end-->
	<div class="w">
		<div id="nav-2013">
			<div id="categorys-2013" class="categorys-2014">
				<div class="mt ld">
					<h2><a href="http://www.jd.com/allSort.aspx">全部商品分类<b></b></a></h2>
				</div>
			</div>
			<div id="treasure"></div>
			<ul id="navitems-2013">
				<li class="fore1" id="nav-home"><a href="http://www.jd.com/">首页</a></li>
				<li class="fore2" id="nav-fashion"><a href="http://fashion.jd.com/">服装城</a></li>
				<li class="fore3" id="nav-chaoshi"><a href="http://channel.jd.com/chaoshi.html">食品</a></li>
				<li class="fore4" id="nav-tuan"><a href="http://tuan.jd.com/" target="_blank">团购</a></li>
				<li class="fore5" id="nav-auction"><a href="http://auction.jd.com/">夺宝岛</a></li>
				<li class="fore6" id="nav-shan"><a href="http://red.jd.com/">闪购</a></li>
				<li class="fore7" id="nav-jinrong"><a href="http://jr.jd.com/" target="_blank">金融</a></li>
			</ul>
		</div>
	</div>
</div>
<div class="w">
	<div class="breadcrumb">
		<strong><a href="#">服饰内衣</a></strong><span> > <a
			href="#">女装</a> > <a href="#">T恤</a></span>
	</div>
</div>
<div class="w main">
<div class="right-extra">
<div id="select" clstag="thirdtype|keycount|thirdtype|select" class="m">
	<div class="mt">
		<h1>
			T恤 -<strong> 商品筛选</strong>
		</h1>
	</div>
	<div class="mc attrs">
		<div data-id="100001" class="brand-attr">
			<div class="attr">
				<div class="a-key">商品类别:</div>
				<div class="a-values">
					<div class="v-tabs">
						<div class="tabcon">
							<div>
								<a href="javascript:filter('catalog_name', '幽默杂货')" >幽默杂货</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '时尚卫浴')">时尚卫浴</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '另类文体')">另类文体</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '创意相架')">创意相架</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '巧妙收纳')">巧妙收纳</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '与钟不同')">与钟不同</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '个性男人')">个性男人</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '电脑周边')">电脑周边</a>
							</div>
							<div>
								<a href="javascript:filter('catalog_name', '品质家电')">品质家电</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '品味茶杯')">品味茶杯</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '四季用品')">四季用品</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '健康宝宝')">健康宝宝</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '新潮美容')">新潮美容</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '产品配件')">产品配件</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '雅致灯饰')">雅致灯饰</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '阳光车饰')">阳光车饰</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '趣味纸抽')">趣味纸抽</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '布艺毛绒')">布艺毛绒</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '益智手工')">益智手工</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '环保餐具')">环保餐具</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '闪亮匙扣')">闪亮匙扣</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '手机饰品')">手机饰品</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '精品数码')">精品数码</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '理财钱罐')">理财钱罐</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '美味厨房')">美味厨房</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '保健按摩')">保健按摩</a>
							</div>						                      
							<div>						                      
								<a href="javascript:filter('catalog_name', '魅力女人')">魅力女人</a>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
		<div data-id="100002" class="prop-attrs">
			<div class="attr">
				<div class="a-key">价格:</div>
				<div class="a-values">
					<div class="v-fold">
						<ul class="f-list">
							<li><a href="javascript:filter('price','0-9')">0-9</a></li>
							<li><a href="javascript:filter('price','10-19')">10-19</a></li>
							<li><a href="javascript:filter('price','20-29')">20-29</a></li>
							<li><a href="javascript:filter('price','30-39')">30-39</a></li>
							<li><a href="javascript:filter('price','40-49')">40-49</a></li>
							<li><a href="javascript:filter('price','50-*')">50以上</a></li>
						</ul>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
<div id="filter">
	<div class="cls"></div>
	<div class="fore1">
		<dl class="order">
			<dt>排序:</dt>
			<dd>
				<a href="javascript:sort()">价格</a><b></b>
			</dd>
		</dl>
		<dl class="activity">
			<dd></dd>
		</dl>
		<div class="pagin pagin-m">
			<span class="text"><i>${result.curPage }</i>/${result.pageCount }</span>
			<a href="javascript:changePage(-1)" class="prev">上一页<b></b></a>
			<a href="javascript:changePage(1)" class="next">下一页<b></b></a>
		</div>
		<div class="total">
			<span>共<strong>${result.recordCount }</strong>个商品
			</span>
		</div>
		<span class="clr"></span>
	</div>
</div>
<!--商品列表开始-->
<div id="plist" class="m plist-n7 plist-n8 prebuy">
	<ul class="list-h">
		<c:forEach var="item" items="${result.productList }">
		<li pid="${item.pid }">
			<div class="lh-wrap">
				<div class="p-img">
					<a target="_blank" href="#">
						<img width="220" height="282" class="err-product" src="/images/${item.picture}">
					</a>
				</div>
				<div class="p-name">
					<a target="_blank" href="#">${item.name }</a>
				</div>
				<div class="p-price">
					<strong>¥<fmt:formatNumber value="${item.price}" maxFractionDigits="2"/></strong><span id="p1269191543"></span>
				</div>
			</div>
		</li>
		</c:forEach>
	</ul>
</div>
<!--商品列表结束-->
</div>
<div class="left">
	<div id="sortlist" clstag="thirdtype|keycount|thirdtype|sortlist"
		class="m">
		<div class="mt">
			<h2>服饰内衣</h2>
		</div>
		<div class="mc">
			<div class="item current">
				<h3>
					<b></b>女装
				</h3>
				<ul>
					<li><a href="http://list.jd.com/1315-1343-1355.html">T恤</a></li>
					<li><a href="http://list.jd.com/1315-1343-1354.html">衬衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-1356.html">针织衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-9713.html">雪纺衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-9710.html">卫衣</a></li>
					<li><a href="http://list.jd.com/1315-1343-9714.html">马甲</a></li>
					<li><a href="http://list.jd.com/1315-1343-9719.html">连衣裙</a></li>
					<li><a href="http://list.jd.com/1315-1343-9720.html">半身裙</a></li>
					<li><a href="http://list.jd.com/1315-1343-9715.html">牛仔裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-9717.html">休闲裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-9716.html">打底裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-9718.html">正装裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-9711.html">小西装</a></li>
					<li><a href="http://list.jd.com/1315-1343-9712.html">短外套</a></li>
					<li><a href="http://list.jd.com/1315-1343-9708.html">风衣</a></li>
					<li><a href="http://list.jd.com/1315-1343-9706.html">毛呢大衣</a></li>
					<li><a href="http://list.jd.com/1315-1343-9707.html">真皮皮衣</a></li>
					<li><a href="http://list.jd.com/1315-1343-9705.html">棉服</a></li>
					<li><a href="http://list.jd.com/1315-1343-3983.html">羽绒服</a></li>
					<li><a href="http://list.jd.com/1315-1343-9722.html">大码女装</a></li>
					<li><a href="http://list.jd.com/1315-1343-9721.html">中老年女装</a></li>
					<li><a href="http://list.jd.com/1315-1343-9723.html">婚纱</a></li>
					<li><a href="http://list.jd.com/1315-1343-11985.html">打底衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-11986.html">旗袍/唐装</a></li>
					<li><a href="http://list.jd.com/1315-1343-11987.html">加绒裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-11988.html">吊带/背心</a></li>
					<li><a href="http://list.jd.com/1315-1343-11989.html">羊绒衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-11991.html">短裤</a></li>
					<li><a href="http://list.jd.com/1315-1343-11993.html">皮草</a></li>
					<li><a href="http://list.jd.com/1315-1343-11996.html">礼服</a></li>
					<li><a href="http://list.jd.com/1315-1343-11998.html">仿皮皮衣</a></li>
					<li><a href="http://list.jd.com/1315-1343-11999.html">羊毛衫</a></li>
					<li><a href="http://list.jd.com/1315-1343-12000.html">设计师/潮牌</a></li>
				</ul>
			</div>
			<div class="item">
				<h3>
					<b></b>男装
				</h3>
			</div>
			<div class="item">
				<h3>
					<b></b>内衣
				</h3>
			</div>
			<div class="item">
				<h3>
					<b></b>服饰配件
				</h3>
			</div>
		</div>
	</div>
	<div id="limitBuy">
		<div id="limitbuy9199"
			clstag="thirdtype|keycount|thirdtype|limitbuy536"
			class="m limitbuy hide">
			<div class="mt">
				<h2>服饰鞋帽</h2>
			</div>
			<div class="mc">
				<div id="clock9199" class="clock">正在加载…</div>
				<div id="limit9199"></div>
			</div>
		</div>
	</div>
	<div id="ad_left" reco_id="6" class="m m0 hide"></div>
	<!--用户最终购买-->
	<div id="finalbuy" class="hide m m0" style="display: block;">
		<div class="mt">
			<h2>
				浏览<font color="red">T恤</font>最终购买
			</h2>
		</div>
		<div class="mc">
		</div>
	</div>
	<div id="weekRank" clstag="thirdtype|keycount|thirdtype|mrank"
		class="m rank">
		<div class="mt">
			<h2>一周销量排行</h2>
		</div>
		<div class="mc">
		</div>
	</div>
</div><!--<div class="left">-->

<span class="clr"></span>
<div id="Collect_Tip" class="Tip360 w260"></div>

</div><!--<div class="w main">-->


<div class="w">
    <div id="service-2013">
        <dl class="fore1">
            <dt><b></b><strong>购物指南</strong></dt>
            <dd>
                <div><a href="http://help.jd.com/help/question-56.html" target="_blank" rel="nofollow">购物流程</a></div>
                <div><a href="http://help.jd.com/help/question-57.html" target="_blank" rel="nofollow">会员介绍</a></div>
                <div><a href="http://help.jd.com/help/question-181.html" target="_blank" rel="nofollow">团购/机票</a></div>
                <div><a href="http://help.jd.com/help/question-61.html" target="_blank" rel="nofollow">常见问题</a></div>
                <div><a href="http://help.jd.com/help/question-63.html" target="_blank" rel="nofollow">大家电</a></div>
                <div><a href="http://help.jd.com/index.html" target="_blank" rel="nofollow">联系客服</a></div>
            </dd>
        </dl>
        <dl class="fore2">
            <dt><b></b><strong>配送方式</strong></dt>
            <dd>
                <div><a href="http://help.jd.com/help/question-64.html" target="_blank" rel="nofollow">上门自提</a></div>
                <div><a href="http://help.jd.com/help/question-360.html" target="_blank" rel="nofollow">211限时达</a></div>
                <div><a href="http://help.jd.com/help/distribution-768.html" target="_blank" rel="nofollow">配送服务查询</a></div>
                <div><a href="http://help.jd.com/help/question-892.html#help2215" target="_blank" rel="nofollow">配送费收取标准</a></div>
                
                <div><a href="http://en.jd.com/chinese.html" target="_blank">海外配送</a></div>
            </dd>
        </dl>
        <dl class="fore3">
            <dt><b></b><strong>支付方式</strong></dt>
            <dd>
                <div><a href="http://help.jd.com/help/question-67.html" target="_blank" rel="nofollow">货到付款</a></div>
                <div><a href="http://help.jd.com/help/question-68.html" target="_blank" rel="nofollow">在线支付</a></div>
                <div><a href="http://help.jd.com/help/question-71.html" target="_blank" rel="nofollow">分期付款</a></div>
                <div><a href="http://help.jd.com/help/question-69.html" target="_blank" rel="nofollow">邮局汇款</a></div>
                <div><a href="http://help.jd.com/help/question-70.html" target="_blank" rel="nofollow">公司转账</a></div>
            </dd>
        </dl>
        <dl class="fore4">
            <dt><b></b><strong>售后服务</strong></dt>
            <dd>
                <div><a href="http://myjd.jd.com/afs/help/afshelp.action" target="_blank" rel="nofollow">售后政策</a></div>
                <div><a href="http://help.jd.com/help/question-99.html" target="_blank" rel="nofollow">价格保护</a></div>
                <div><a href="http://help.jd.com/help/question-100.html" target="_blank" rel="nofollow">退款说明</a></div>
                <div><a href="http://myjd.jd.com/repair/repairs.action" target="_blank" rel="nofollow">返修/退换货</a></div>
                <div><a href="http://help.jd.com/help/question-881.html" target="_blank" rel="nofollow">取消订单</a></div>
            </dd>
        </dl>
        <dl class="fore5">
            <dt><b></b><strong>特色服务</strong></dt>
            <dd>
                <div><a href="http://help.jd.com/help/question-79.html" target="_blank">夺宝岛</a></div>
                <div><a href="http://help.jd.com/help/question-86.html" target="_blank">DIY装机</a></div>
                <div><a href="http://fuwu.jd.com/" target="_blank" rel="nofollow">延保服务</a></div>
                <div><a href="http://giftcard.jd.com/market/index.action" target="_blank" rel="nofollow">京东E卡</a></div>
                <div><a href="http://help.jd.com/help/question-91.html" target="_blank" rel="nofollow">节能补贴</a></div>
                <div><a href="http://mobile.jd.com/" target="_blank" rel="nofollow">京东通信</a></div>
            </dd>
        </dl>
        <span class="clr"></span>
    </div>
</div><!-- service end --><div class="w">
    <div id="footer-2013">
        <div class="links">
            <a rel="nofollow" target="_blank" href="http://www.jd.com/intro/about.aspx">关于我们</a>|<a rel="nofollow" target="_blank" href="http://www.jd.com/contact/">联系我们</a>|<a rel="nofollow" target="_blank" href="http://zhaopin.jd.com/">人才招聘</a>|<a rel="nofollow" target="_blank" href="http://www.jd.com/contact/joinin.aspx">商家入驻</a>|<a rel="nofollow" target="_blank" href="http://sale.jd.com/act/y3surX7qpM.html">广告服务</a>|<a rel="nofollow" target="_blank" href="http://app.jd.com/">手机京东</a>|<a target="_blank" href="http://club.jd.com/links.aspx">友情链接</a>|<a target="_blank" href="http://cps.jd.com/">销售联盟</a>|<a href="http://club.jd.com/" target="_blank">京东社区</a>|<a href="http://gongyi.jd.com/" target="_blank">京东公益</a></div>
        <div class="copyright">北京市公安局朝阳分局备案编号110105014669  |  京ICP证070359号  |  互联网药品信息服务资格证编号(京)-非经营性-2011-0034<br><a rel="nofollow" href="http://misc.360buyimg.com/skin/df/i/com/f_music.jpg" target="_blank">音像制品经营许可证苏宿批005号</a>|  出版物经营许可证编号新出发(苏)批字第N-012号  |  互联网出版许可证编号新出网证(京)字150号<br><a href="http://misc.360buyimg.com/wz/wlwhjyxkz.jpg" target="_blank">网络文化经营许可证京网文[2011]0168-061号</a>Copyright © 2004-2015  京东JD.com 版权所有<br>京东旗下网站:<a href="http://en.jd.com/" target="_blank">English Site</a></div>
        <div class="authentication"><a rel="nofollow" target="_blank" href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202007080200026"><img width="108" height="40" alt="经营性网站备案中心" src="<c:url value='/resource'/>/108_40_zZOKnl.gif" class="err-product"></a>
            <a rel="nofollow" target="_blank" tabindex="-1"
				href="https://ss.cnnic.cn/verifyseal.dll?sn=2008070300100000031&ct=df&pa=294005"
				id="urlknet"><img width="108" height="40" border="true"
				name="CNNIC_seal" alt="可信网站"
				src="<c:url value='/resource'/>/kxwz.gif"
				class="err-product"></a>
			<a rel="nofollow" target="_blank"
				href="http://www.bj.cyberpolice.cn/index.do"><img width="108"
				height="40" alt="朝阳网络警察"
				src="<c:url value='/resource'/>/cywljc.png"
				class="err-product"></a>
			<a rel="nofollow" target="_blank"
				href="https://search.szfw.org/cert/l/CX20120111001803001836"><img
				width="112" height="40"
				src="<c:url value='/resource'/>/112_40_WvArIl.png"
				class="err-product"></a>
		</div>
    </div>
</div>
</body>
</html>

请求参数:

String queryString,String catalog_name,Stringprice,Integer page,String sort

请求返回值:

String(product_list) //返回到product_list.jsp页面

request域需要存储的数据(页面所需数据)

queryString、catalog_name、price、sort、resultcurPagepageCountrecordCountproductList


业务层:

根据查询条件,调用solrj的api方法,搜索索引库

封装result对象


创建pojo

页面需要什么就传递什么,根据分析简历商品的pojo,pid name price picture

public class Product {
	private String pid;
	private String name;
	private String price;
	private String picture;
get/set。。。
}



创建分页结果pojo

public class Result {
	private Integer curPage;// 当前页
	private Integer pageCount;// 总页数
	private Long recordCount;// 数据总条数
	private List<Product> productList;// 商品结果集
get/set。。。	
}

service

public interface SearchService {
	/**
	 * 根据条件从索引库中查询数据
	 * 
	 * @param queryString 查询关键词
	 * @param catalog_name 商品分类
	 * @param price 商品价格
	 * @param sort  排序
	 * @param page  当前页码
	 * @return
	 */
	Result search(String queryString, String catalog_name, String price, String sort, Integer page);

}

@Service	
public class SearchServiceImpl implements SearchService {

	@Autowired
	private HttpSolrServer httpSolrServer;

	@Override
	public Result search(String queryString, String catalog_name, String price, String sort, Integer page) {
		// 创建SolrQuery对象
		SolrQuery solrQuery = new SolrQuery();

		// 设置查询关键词
		if (StringUtils.isNotBlank(queryString)) {
			solrQuery.setQuery(queryString);
		} else {
			solrQuery.setQuery("*:*");
		}
		// 设置默认域
		solrQuery.set("df", "product_keywords");

		// 设置商品类名过滤条件
		// 设置商品分类名称
		if (StringUtils.isNotBlank(catalog_name)) {
			catalog_name = "product_catalog_name:" + catalog_name;
		}

		// 设置商品价格
		if (StringUtils.isNotBlank(price)) {
			String[] sp = price.split("-");
			if (sp != null && sp.length == 2) {
				price = "product_price:[" + sp[0] + " TO " + sp[1] + "]";
			}
		}
		solrQuery.setFilterQueries(catalog_name, price);

		// 商品排序,如果是1,正序排序,如果是其他,则倒序排序
		if ("1".equals(sort)) {
			solrQuery.setSort("product_price", ORDER.asc);
		} else {
			solrQuery.setSort("product_price", ORDER.desc);
		}

		// 设置分页
		if (page == null) {
			page = 1;
		}
		solrQuery.setStart((page - 1) * 20);
		solrQuery.setRows(20);

		// 设置高亮
		solrQuery.setHighlight(true);
		solrQuery.addHighlightField("product_name");
		solrQuery.setHighlightSimplePre("<font color='red'>");
		solrQuery.setHighlightSimplePost("</font>");

		// 查询数据
		QueryResponse response;
		try {
			response = httpSolrServer.query(solrQuery);
			// 获取查询总数
			SolrDocumentList results = response.getResults();
			long total = results.getNumFound();

			// 获取高亮数据
			Map<String, Map<String, List<String>>> map = response.getHighlighting();

			// 解析结果集,存放到Product中
			List<Product> products = new ArrayList<>();
			for (SolrDocument solrDocument : results) {
				Product product = new Product();
				// 商品id
				product.setPid(solrDocument.get("id").toString());
				// 商品标题,设置高亮
				List<String> list = map.get(solrDocument.get("id")).get("product_name");
				if (list != null && list.size() > 0) {
					product.setName(list.get(0));
				} else {
					product.setName(solrDocument.get("product_name").toString());
				}
				// 商品价格
				product.setPrice(solrDocument.get("product_price").toString());
				// 商品图片
				product.setPicture(solrDocument.get("product_picture").toString());

				products.add(product);
			}

			// 封装返回对象
			Result result = new Result();

			result.setCurPage(page);
			result.setRecordCount(total);
			result.setProductList(products);
			// 总页数计算公式(total+rows-1)/rows
			result.setPageCount((int) (total + 20 - 1) / 20);

			return result;
		} catch (SolrServerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


		return null;

	}



controller

@Controller
@RequestMapping("/product")
public class ProductController {
	@Autowired
	private SearchService searchService;
	@RequestMapping("list")
	public String queryProduct(Model model, String queryString, String catalog_name, String price, String sort,
			Integer page) {
		// 根据条件搜索


		Result result = this.searchService.search(queryString, catalog_name, price, sort, page);

		// 把结果集放到模型中
		model.addAttribute("result", result);

		// 搜索条件数据回显
		model.addAttribute("queryString", queryString);
		model.addAttribute("catalog_name", catalog_name);
		model.addAttribute("price", price);
		model.addAttribute("sort", sort);
		model.addAttribute("page", page);

		return "product_list";
	}

}



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LawsonJin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值