淘淘商城第八天笔记Word文档下载推荐.docx
- 文档编号:21162241
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:18
- 大小:637.69KB
淘淘商城第八天笔记Word文档下载推荐.docx
《淘淘商城第八天笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《淘淘商城第八天笔记Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
创建一个SearchResult
包含四个属性:
1、商品列表
2、查询结果总记录数
3、查询结果的总页数
4、当前页码
publicclassSearchResult{
privateList<
SearchItem>
itemList;
privateLongrecordCount;
privateintpageCount;
privateintcurPage;
}
使用TaotaoResult包装一个SearchResult返回结果。
3.1.1Dao层
根据查询条件进行查询,返回查询结果。
SolrQuery对象
1、查询结果的商品列表
2、查询结果的总记录数
返回SearchResult
@Repository
publicclassSearchDaoImplimplementsSearchDao{
@Autowired
privateSolrServersolrServer;
@Override
publicSearchResultsearch(SolrQueryquery)throwsException{
//执行查询
QueryResponseresponse=solrServer.query(query);
//取查询结果列表
SolrDocumentListsolrDocumentList=response.getResults();
List<
itemList=newArrayList<
>
();
for(SolrDocumentsolrDocument:
solrDocumentList){
//创建一个SearchItem对象
SearchItemitem=newSearchItem();
item.setCategory_name((String)solrDocument.get("
item_category_name"
));
item.setId((String)solrDocument.get("
id"
item.setImage((String)solrDocument.get("
item_image"
item.setPrice((Long)solrDocument.get("
item_price"
item.setSell_point((String)solrDocument.get("
item_sell_point"
//取高亮显示
Map<
String,Map<
String,List<
String>
highlighting=response.getHighlighting();
List<
list=highlighting.get(solrDocument.get("
)).get("
item_title"
);
StringitemTitle="
"
;
if(list!
=null&
&
list.size()>
0){
//取高亮后的结果
itemTitle=list.get(0);
}else{
itemTitle=(String)solrDocument.get("
}
item.setTitle(itemTitle);
//添加到列表
itemList.add(item);
}
SearchResultresult=newSearchResult();
result.setItemList(itemList);
//查询结果总数量
result.setRecordCount(solrDocumentList.getNumFound());
returnresult;
}
3.1.2Service层
1、接收查询条件、分页条件。
2、创建SolrQuery对象,设置查询条件、分页条件。
3、调用dao进行搜索
4、计算总页数,把总页数设置到SearchResult对象中,设置当前页属性。
5、返回SearchResult
1、查询条件
2、Page
3、Rows
SearchResult
@Service
publicclassSearchServiceImplimplementsSearchService{
privateSearchDaosearchDao;
publicSearchResultsearch(StringqueryString,intpage,introws)throwsException{
//创建查询条件
SolrQueryquery=newSolrQuery();
//设置查询条件
query.setQuery(queryString);
//设置分页条件
query.setStart((page-1)*rows);
query.setRows(rows);
//设置默认搜索域
query.set("
df"
"
//设置高亮
query.setHighlight(true);
query.addHighlightField("
query.setHighlightSimplePre("
<
fontclass=\"
skcolor_ljg\"
query.setHighlightSimplePost("
/font>
SearchResultsearchResult=searchDao.search(query);
//计算总页数
LongrecordCount=searchResult.getRecordCount();
intpageCount=(int)(recordCount/rows);
if(recordCount%rows>
pageCount++;
searchResult.setPageCount(pageCount);
searchResult.setCurPage(page);
returnsearchResult;
3.1.3Controller层
发布服务。
搜索服务的url:
/search/q?
keyword=xxx&
page=1&
rows=30
参数keyword、page、rows
json数据,使用TaotaoResult包装SearchResult。
@Controller
publicclassSearchController{
privateSearchServicesearchService;
@RequestMapping("
/q"
)
@ResponseBody
publicTaotaoResultsearch(@RequestParam(defaultValue="
)Stringkeyword,
@RequestParam(defaultValue="
1"
)Integerpage,
30"
)Integerrows){
try{
//转换字符集
keyword=newString(keyword.getBytes("
iso8859-1"
),"
utf-8"
SearchResultsearchResult=searchService.search(keyword,page,rows);
returnTaotaoResult.ok(searchResult);
}catch(Exceptione){
e.printStackTrace();
returnTaotaoResult.build(500,ExceptionUtil.getStackTrace(e));
3.2在portal中实现搜索
3.2.1分析
调用taotao-search发布的服务,实现搜索。
使用HttpClient调用服务。
需要把json转换成java对象。
把java对象传递给页面。
请求的url:
http:
//localhost:
8082/search.html
q:
查询条件
jsp页面(search.jsp)
Search.jsp分析:
数据:
Query:
totalPages:
总页数
itemList:
商品列表(每个元素可以是SearchItem)
Page:
当前页
3.2.2Service层
查询条件、page、rows。
根据查询调用taotao-search发布的服务,查询商品列表。
得到json数据,需要把json转换成java对象,返回SearchResult。
@Value("
${SEARCH_BASE_URL}"
privateStringSEARCH_BASE_URL;
publicSearchResultsearch(Stringkeyword,intpage,introws){
//调用服务查询商品列表
Map<
String,String>
param=newHashMap<
param.put("
keyword"
keyword);
page"
page+"
rows"
rows+"
//调用服务
Stringjson=HttpClientUtil.doGet("
SEARCH_BASE_URL"
param);
//转换成java对象
TaotaoResulttaotaoResult=TaotaoResult.formatToPojo(json,SearchResult.class);
//取返回的结果
SearchResultsearchResult=(SearchResult)taotaoResult.getData();
3.2.3Controller
接收三个参数:
查询条件、page、rows
调用服务查询商品列表。
把商品列表传递给jsp、参数回显。
返回逻辑视图(search.jsp)
/search
/search"
publicStringsearch(@RequestParam("
q"
60"
)Integerrows,Modelmodel){
//get乱码处理
}catch(UnsupportedEncodingExceptione){
keyword="
SearchResultsearchResult=searchService.search(keyword,page,rows);
//参数传递给页面
model.addAttribute("
query"
totalPages"
searchResult.getPageCount());
itemList"
searchResult.getItemList());
searchResult.getCurPage());
//返回逻辑视图
return"
search"
解决图片显示不出来的问题:
修改ItemSearch:
4Solr集群
4.1Solr集群的架构
SolrCloud
需要用到solr+zookeeper
要完成的集群结构
4.2Zookeeper
1、集群管理
主从的管理、负载均衡、高可用的管理。
集群的入口。
Zookeeper必须是集群才能保证高可用。
Zookeeper有选举和投票的机制。
集群中至少应该有三个节点。
2、配置文件的集中管理
搭建solr集群时,需要把Solr的配置文件上传zookeeper,让zookeeper统一管理。
每个节点都到zookeeper上取配置文件。
3、分布式锁
4、忘了
4.3集群需要的服务器
Zookeeper:
3台
Solr:
4台
伪分布式,zookeeper三个实例、tomcat(solr)需要四个实例。
Zookeeper需要安装jdk。
4.4集群搭建步骤
第一部分:
Zookeeper集群搭建
第一步:
需要把zookeeper的安装包上传到服务器。
第二步:
把zookeeper解压。
第三步:
把zookeeper向/usr/local/solr-cloud目录下复制三份。
配置zookeeper。
1、在zookeeper01目录下创建一个data文件夹。
2、在data目录下创建一个myid的文件
3、Myid的内容为1(02对应“2”,03对应“3”)
4、Zookeeper02、03以此类推。
5、进入conf文件,把zoo_sample.cfg文件改名为zoo.cfg
6、修改zoo.cfg,把dataDir=属性指定为刚创建的data文件夹。
7、修改zoo.cfg,把clientPort指定为不冲突的端口号(01:
2181、02:
2182、03:
2183)
8、在zoo.cfg中添加如下内容:
server.1=192.168.25.154:
2881:
3881
server.2=192.168.25.154:
2882:
3882
server.3=192.168.25.154:
2883:
3883
第四步:
启动zookeeper。
Zookeeper的目录下有一个bin目录。
使用zkServer.sh启动zookeeper服务。
启动:
./zkServer.shstart
关闭:
./zkServer.shstop
查看服务状态:
./zkServer.shstatus
第二部分:
搭建solr集群
安装四个tomcat,修改其端口号不能冲突。
8080~8083
向tomcat下部署solr。
把单机版的solr工程复制到tomcat下即可。
为每个solr实例创建一solrhome。
为每个solr实例关联对应的solrhome。
修改web.xml
第五步:
修改每个solrhome下的solr.xml文件。
修改host、hostPort两个属性。
分别是对应的ip及端口号。
第六步:
把配置文件上传到zookeeper。
需要使用
/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh命令上传配置文件。
把/usr/local/solr-cloud/solrhome01/collection1/conf目录上传到zookeeper。
需要zookeeper集群已经启动。
./zkcli.sh-zkhost192.168.25.154:
2181,192.168.25.154:
2182,192.168.25.154:
2183-cmdupconfig-confdir/usr/local/solr-cloud/solrhome01/collection1/conf-confnamemyconf
第七步:
查看是否上传成功。
使用zookeeper的zkCli.sh命令。
第八步:
告诉solr实例zookeeper的位置。
需要修改tomcat的catalina.sh添加
JAVA_OPTS="
-DzkHost=192.168.25.154:
2183"
每个节点都需要添加。
第九步:
启动每个solr实例。
第十步:
集群分片。
将集群分为两片,每片两个副本。
//192.168.25.154:
8080/solr/admin/collections?
action=CREATE&
name=collection2&
numShards=2&
replicationFactor=2
第十一步:
删除不用collection1
action=DELETE&
name=collection1
4.5使用solrJ连接集群
@Test
publicvoidtestSolrClout()throwsException{
//创建一个SolrServer对象
CloudSolrServersolrServer=newCloudSolrServer("
192.168.25.154:
//设置默认的collection
solrServer.setDefaultCollection("
collection2"
//创建一个文档对象
SolrInputDocumentdocument=newSolrInputDocument();
document.addField("
test01"
title1"
//添加文档
solrServer.add(document);
//提交
solrSmit();
4.6项目切换到集群
只需要在spring容器中配置一个集群版的SolrServer对象即可。
5商品同步
修改商品信息后,需要把商品信息同步到索引库。
需要search工程发布服务,在后台系统如果商品信息发生修改后,可以在后台系统的Controller中调用发布的服务。
把商品id传递给服务,服务进行索引库的内容同步。
作业!
!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 淘淘 商城 八天 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)