暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【大数据开发】Elasticsearch推荐系统(六)

数据信息化 2020-07-24
338



Elasticsearch

之小说详情页功能开发-页面效果(六)

Novel detail page function development - Page effect

简介

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

页面展示:

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 root
bin/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>() {
@Override
public 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论