简介
本文将介绍如何开发小说网站目录页面
页面展示:

01
导入ES脚本编写
详情页数据由两个部分组成:novel和novel_detail。之前的novel信息已经导入ES ,现在我们要导入novel detail信息,并且只导入novel_detail的章节信息,其他信息不导入。
(1)进入脚本目录:
cd /etc/logstash/conf.d/
(2)创建脚本文件:
sudo touch novel_detail.conf
(3)写入脚本数据:
sudo vi novel_detail.conf
(4)脚本内容:
input {stdin{}jdbc {jdbc_driver_library => "/opt/shell/mysql-connector-java-5.1.27.jar"jdbc_driver_class => "com.mysql.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://bigdata-pro-m01.kfk.com:3306/db_novel"jdbc_user => "root"jdbc_password => "12345678"statement => "SELECT id,novel_name,novel_id,chapter_name from novel_detail"jdbc_validate_connection => "true"jdbc_validation_timeout => "3600"connection_retry_attempts => "5"jdbc_paging_enabled => "true"jdbc_page_size => "1000"sql_log_level => "warn"lowercase_column_names => "true"codec => plain{ charset => "UTF-8" }}}filter{json{source => "message"remove_field => ["message"]}}output {elasticsearch {hosts => "bigdata-pro-m01.kfk.com:9200"index => "novel_detail"document_id => "%{id}"codec => plain{charset => "UTF-8"}}stdout{codec => "json_lines"}}
(5)执行数据迁移:
cd /usr/share/logstash/su rootbin/logstash -f /etc/logstash/conf.d/novel_detail.conf
02
详情页目录开发
(1)Controller代码:
/*** @Description: 详情页+目录* @Param: [nid, map]* @return: java.lang.String* @Author: zhangjingyu* @Date: 2020/7/21*/@RequestMapping(value="openCatalog",method= RequestMethod.GET)public String openCatalog(String nid,Map<String,Object> map){DetailNovel novel = novelServiceImpl.selectNovelByNid(nid);List<Chapter> chapterList = chapterServiceImpl.selectChapterByNid(nid);map.put("novel",novel);map.put("chapterList",chapterList);return "catalog";}
(2)Service代码(代码1):
/*** @Description: 根据小说的id查找章节* @Param: [nid]* @return: java.util.List<com.sif.pojo.Chapter>* @Author: zhangjingyu* @Date: 2020/7/21*/public List<Chapter> selectChapterByNid(String nid) {SearchRequestBuilder builder = EsClientUtils.getClient().prepareSearch(CommonUtil.index_detail_search);//根据小说的id来获取章节TermQueryBuilder novelBuilder = QueryBuilders.termQuery("novel_id", nid);builder.setQuery(novelBuilder);builder.setTypes("doc");SearchResponse searchResponse = builder.get();SearchHits hits = searchResponse.getHits();List<Chapter> chaptersList = new ArrayList<>();SearchHit[] chapterHits = hits.getHits();//循环获取章节信息for (SearchHit hit:chapterHits) {Map<String, Object> sourceAsMap = hit.getSourceAsMap();Chapter chapter = new Chapter();chapter.setId(Integer.valueOf(sourceAsMap.get("id").toString()));chapter.setChapterName(sourceAsMap.get("chapter_name").toString());chapter.setNovelId(Integer.valueOf(sourceAsMap.get("novel_id").toString()));chaptersList.add(chapter);}//要对章节信息进行排序Collections.sort(chaptersList, new Comparator<Chapter>() {@Overridepublic int compare(Chapter o1, Chapter o2) {return o1.getId()-o2.getId();}});return chaptersList;}
(3)Service代码(代码2)
/*根据小说的id搜索小说*/public DetailNovel selectNovelByNid(String nid){GetResponse response = EsClientUtils.getClient().prepareGet(CommonUtil.index_search,"doc", nid).execute().actionGet();Map<String, Object> sourceAsMap = response.getSourceAsMap();DetailNovel detailNovel = new DetailNovel();detailNovel.setName(sourceAsMap.get("name").toString());detailNovel.setId(sourceAsMap.get("id").toString());detailNovel.setDetail(sourceAsMap.get("detail").toString());detailNovel.setNovelInfo(sourceAsMap.get("novelinfo").toString());detailNovel.setAuthor(sourceAsMap.get("author").toString());detailNovel.setCategory(sourceAsMap.get("category").toString());detailNovel.setNews(sourceAsMap.get("new").toString());detailNovel.setStatus(sourceAsMap.get("status").toString());detailNovel.setCollect(Integer.valueOf(sourceAsMap.get("collect").toString()));detailNovel.setCount(Integer.valueOf(sourceAsMap.get("count").toString()));detailNovel.setLastupdate(sourceAsMap.get("lastupdate").toString());detailNovel.setClickcount(Integer.valueOf(sourceAsMap.get("clickcount").toString()));detailNovel.setMonthclick(Integer.valueOf(sourceAsMap.get("monthclick").toString()));detailNovel.setWeekclick(Integer.valueOf(sourceAsMap.get("weekclick").toString()));detailNovel.setCountreCommend(Integer.valueOf(sourceAsMap.get("countrecommend").toString()));detailNovel.setMonthreCommend(Integer.valueOf(sourceAsMap.get("monthrecommend").toString()));detailNovel.setWeekreCommend(Integer.valueOf(sourceAsMap.get("weekrecommend").toString()));detailNovel.setPicUrl(sourceAsMap.get("picurl").toString());return detailNovel;}

扫描二维码 关注我们
微信号 : BIGDT_IN
文章转载自数据信息化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





