javaEE商城第六天笔记_第1页
javaEE商城第六天笔记_第2页
javaEE商城第六天笔记_第3页
javaEE商城第六天笔记_第4页
javaEE商城第六天笔记_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、魔力商城第七天1 内容回顾1、 在业务逻辑中添加缓存2、 使用redis做缓存a) Redis服务的安装、单机版、集群版。b) Redis的java客户端Jedis。i. 单机版使用Jedis对象、使用JedisPool。ii. 集群版使用JedisCluster类。c) Spring和jedis集成。3、 添加缓存添加缓存不能影响正常的业务逻辑。4、 缓存同步当后台对内容信息修改后,需要同步缓存。只需要删除对应的key即可。2 课程计划1、 搜索系统的搭建2、 Solr服务的搭建。3、 搜索功能实现3 搜索系统的搭建在首页搜索框中输入关键词点击搜索按钮。会跳转到搜索系统,在搜索系统中展示搜索

2、结果。应该先搭建搜索系统。需要搭建的工程:1、 搜索系统(前台)2、 搜索服务3、 Solr服务使用maven管理工程。3.1 搜索服务工程搭建3.1.1 创建工程可以参考moli-manager搭建1、 搜索聚合工程:moli-search(maven聚合工程)2、 一个搜索结果展现的web工程moli-search-web3、一个接口工程:moli-search-interface4、一个服务实现类工程:moli-search-service3.1.2 框架整合使用到的技术:MybatisSpringSolrJDubbo moli-search的pom文件4.0.0com.m

3、olimoli-parent0.0.1-SNAPSHOTcom.molimoli-search0.0.1-SNAPSHOTpomcom.molimoli-common0.0.1-SNAPSHOTmoli-search-interfacemoli-search-serviceorg.apache.tomcat.maventomcat7-maven-plugin/808 moli-search-interface的pom4.0.0com.molimoli-search0.0.1-SNAPSHOTmoli-search-interfacecom.molimoli-manager-po

4、jo0.0.1-SNAPSHOT moli-search-service的pom4.0.0com.molimoli-search0.0.1-SNAPSHOTmoli-search-servicewarcom.molimoli-manager-dao0.0.1-SNAPSHOTcom.molimoli-search-interface0.0.1-SNAPSHOTorg.springframeworkspring-contextorg.springframeworkspring-beansorg.springframeworkspring-webmvcorg.springframew

5、orkspring-jdbcorg.springframeworkspring-aspectscom.alibabadubboorg.apache.zookeeperzookeepercom.github.sgroschupfzkclientorg.apache.solrsolr-solrj 框架整合参考moli-manager-service3.2 搜索工程搭建可以参考moli-portal-web工程搭建。搜索工程名:moli-search-web打包方式:war3.2.1 创建工程3.2.2 Pom文件4.0.0com.molimoli-parent0.0.1-SNAPSH

6、OTcom.molimoli-search-web0.0.1-SNAPSHOTwarcom.molimoli-search-interface0.0.1-SNAPSHOTjstljstljavax.servletservlet-apiprovidedjavax.servletjsp-apiprovidedorg.springframeworkspring-contextorg.springframeworkspring-beansorg.springframeworkspring-webmvcorg.springframeworkspring-jdbcorg.springframeworksp

7、ring-aspectscom.alibabadubboorg.apache.zookeeperzookeepercom.github.sgroschupfzkclientjunitjunitorg.apache.tomcat.maventomcat7-maven-plugin/80854 Solr服务的安装4.1 Solr服务的安装环境使用solr4.10.3版本Jdk要求1.7以上版本Tomcat要求7以上版本4.2 安装步骤第一步:把jdk安装好。第二步:把tomcat、solr压缩包上传到服务器第三步:安装tomcat第四步:把solr的安装包解压缩。第五步:进入/root/solr-

8、4.10.3/dist目录把solr-4.10.3.war部署到tomcat中。第六步:解压缩war包。启动tomcat自动解压。第七步:把/root/solr-4.10.3/example/lib/ext目录下所有的jar包复制到solr工程中。rootlocalhost ext# pwd/root/solr-4.10.3/example/lib/extrootlocalhost ext# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/第八步:创建solrhome。可以使用/root/solr-4.10.3/example目录下的s

9、olr文件夹作为solrhome。rootlocalhost example# cp solr /usr/local/solr/solrhome -r第九步:告诉solr服务solrhome的位置。可以修改solr工程的web.xml文件4.3 安装中文分析器使用IKAnalyzer中文分析器。安装步骤:第一步:把IKAnalyzer分析器上传到服务器。第二步:把IKAnalyzer2012FF_u1.jar添加到solr工程中。rootlocalhost IK Analyzer 2012FF_hf1# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/to

10、mcat/webapps/solr/WEB-INF/lib/第三步:把IK的配置文件及扩展词典放到solr工程的classpath下。rootlocalhost IK Analyzer 2012FF_hf1# cp IKAnalyzer.cfg.xml mydict.dic ext_stopword.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes第四步:需要配置schema.xml在配置文件中添加一个FieldType,类型是TextField,指定分析器使用IkAnalyzer。 第五步:创建业务域需要的字段:商品id、商品的名

11、称、商品的卖点、商品价格、商品图片、商品分类第六步:重启tomcat5 商品信息导入索引库5.1 功能分析查询商品的sql语句:SELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1不能使用逆向工程。5.2 Dao层创建一个pojo接收查询结果:public clas

12、s SearchItem private Long id;private String title;private String sell_point;private Long price;private String image;private String category_name;private String item_des;在search工程中创建ItemMapper.xmlSELECTa.id,a.title,a.sell_point,a.price,a.image, category_name,c.item_descFROMtb_item aLEFT JOIN tb

13、_item_cat b ON a.cid = b.idLEFT JOIN tb_item_desc c ON a.id = c.item_idWHEREa.status = 1在search工程中创建mapper接口public interface ItemMapper List getItemList();在search工程的applicationContext-dao.xml中配置mapper扫描(在原来的扫包配置中,添加一项):5.3 Service层使用mapper查询商品列表,把商品列表写入索引库。返回写入成功,返回MoliResult。添加文档步骤:第一步:使用bean配置结合注解

14、的方式创建一个SolrServer对象,如果是单机版使用HttpSolrServer、集群版使用CloudSolrServer。第二步:创建一个文档对象SolrInputDocument对象。第三步:向文档中添加域。每个文档对象中必须有id域,id不能重复。用到的所有的域的名称必须在schema.xml中定义。第四步:使用SolrServer把文档添加到索引库第五步:提交。Servicepublic class SearchItemServiceImpl implements SearchItemService Autowiredprivate ItemMapper itemMapper;/

15、第一步:创建一个SolrServer对象,如果是单机版使用HttpSolrServer、集群版使用CloudSolrServer。Autowiredprivate SolrServer solrServer;Overridepublic moliResult importAllItems() throws Exception / 查询商品列表,如果商品太多需要分页。List itemList = itemMapper.getItemList();/ 把商品信息写入索引库for (SearchItem searchItem : itemList) / 第二步:创建一个文档对象SolrInputD

16、ocument对象。SolrInputDocument document = new SolrInputDocument();/ 第三步:向文档中添加域。每个文档对象中必须有id域,id不能重复。用到的所有的域的名称必须在schema.xml中定义。document.addField(id, searchItem.getId();document.addField(item_title, searchItem.getTitle();document.addField(item_sell_point, searchItem.getSell_point();document.addField(it

17、em_price, searchItem.getPrice();document.addField(item_image, searchItem.getImage();document.addField(item_category_name, searchItem.getCategory_name();document.addField(item_desc, searchItem.getItem_des();/ 第四步:使用SolrServer把文档添加到索引库solrServer.add(document);/ 第五步:提交。solrSmit();/返回成功return m

18、oliResult.ok();5.3.1 配置HttpSolrServer:在applicationContext-service.xml中配置solrserver5.3.2 发布服务5.4 Controller层5.4.1 引用服务在moli-manager-web添加引用:接收请求,调用服务更新索引库请求url:/index/importall返回值:moliResult。Controllerpublic class IndexManagerController Autowiredprivate SearchItemService searchItemService;RequestMapp

19、ing(/index/importall)ResponseBodypublic moliResult importAllItems() try moliResult moliResult = searchItemService.importAllItems();return moliResult; catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();return moliResult.build(500, 同步失败);由于search工程中包含mapper层,为了将xml文件打如search-serv

20、ice的jar包中,需要修改moli-search-service的pom文件,添加如下内容: src/main/java */*.properties */*.xml false src/main/resources */*.properties */*.xml false 6 商品搜索功能6.1 功能分析6.1.1 使用solrJ搜索索引库使用方法:第一步:创建一个SolrServer对象。第二步:创建一个SolrQuery对象第三步:在SolrQuery对象中指定查询条件、过滤条件、排序条件等。第四步:使用SolrServer执行查询,参数就是Query对象。第五步:得到查询结果。得到一

21、个查询列表第六步:遍历列表,打印结果。public class TestSolrJ Testpublic void testSolrJQuery() throws Exception / 第一步:创建一个SolrServer对象。SolrServer solrServer = new HttpSolrServer(54:8080/solr);/ 第二步:创建一个SolrQuery对象SolrQuery query = new SolrQuery();/ 第三步:在SolrQuery对象中指定查询条件、过滤条件、排序条件等。query.setQuery(*:*

22、);/ 第四步:使用SolrServer执行查询,参数就是Query对象。QueryResponse response = solrServer.query(query);/ 第五步:得到查询结果。得到一个查询列表SolrDocumentList solrDocumentList = response.getResults();long numFound = solrDocumentList.getNumFound();System.out.println(查询结果的总记录数: + numFound);/ 第六步:遍历列表,打印结果。for (SolrDocument solrDocument

23、 : solrDocumentList) System.out.println(solrDocument.get(id);System.out.println(solrDocument.get(item_title);System.out.println(solrDocument.get(item_price);1、 在页面输入查询条件,接收查询条件,使用get请求。2、 根据查询条件创建一个SolrQuery对象。3、 使用SolrServer对象执行查询4、 得到查询结果需要把结果转换成Pojo列表。把结果转换成List5、 把结果传递给jsp,jsp对结果进行渲染。6.2 Dao层提供一

24、个通用的访问索引库的方法。可以把SolrQuery对象作为参数。执行SolrQuery,返回结果列表List,还需要返回查询结果的总数量。需要取高亮显示,高亮显示的域item_title。需要把结果封装到一个pojo中:public class SearchResult implements Serializable private List itemList;private long recordCount;private int pageCount;private int curPage;参数:SolrQuery返回值:SearchResult Repositorypublic class

25、 SearchDaoImpl implements SearchDao Autowiredprivate SolrServer solrServer;Overridepublic SearchResult query(SolrQuery query) throws Exception /根据查询条件执行查询QueryResponse response = solrServer.query(query);/取查询结果SolrDocumentList solrDocumentList = response.getResults();/商品列表List itemList = new ArrayLis

26、t();/把文档列表转换成商品列表for (SolrDocument solrDocument : solrDocumentList) SearchItem item = new SearchItem();item.setId(Long.parseLong(solrDocument.get(id).toString();item.setCategory_name(String) solrDocument.get(item_category_name);item.setImage(String) solrDocument.get(item_image);item.setPrice(long) s

27、olrDocument.get(item_price);item.setSell_point(String) solrDocument.get(item_sell_point);/取高亮显示MapString, MapString, List highlighting = response.getHighlighting();List list = highlighting.get(solrDocument.get(id).get(item_title);String itemTitle = ;if (list != null & list.size() 0) /取高亮结果itemTitle

28、= list.get(0); else itemTitle = (String) solrDocument.get(item_title);item.setTitle(itemTitle);/添加到商品列表itemList.add(item);SearchResult result = new SearchResult();/商品列表result.setItemList(itemList);/查询结果总记录数result.setRecordCount(solrDocumentList.getNumFound();return result;6.3 Service层1、根据查询条件查询商品列表。

29、参数:查询条件、分页条件、每页显示的记录数String queryStringString pageString rows2、 根据参数拼装SolrQuery对象。3、 调用dao查询商品列表,得到SearchResult结果。4、 计算查询结果的总页数。5、 返回SearchResult。Servicepublic class SearchServiceImpl implements SearchService Autowiredprivate SearchDao searchDao;Overridepublic SearchResult search(String queryString,

30、 int page, int rows) throws Exception /拼装solrQuery对象SolrQuery query = new SolrQuery();/设置查询条件query.setQuery(queryString);/设置分页条件query.setStart(page-1)*rows);query.setRows(rows);/设置默认搜索域query.set(df, item_title);/设置高亮query.setHighlight(true);/高亮显示的域query.addHighlightField(item_title);/高亮的前缀后缀query.setHighlightSimplePre();query.setHighlightSimplePost();/执行查询SearchResu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论