package com.xyf.service;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.StatusLine;
import org.apache.http.entity.ContentType;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.common.recycler.Recycler.C;
import org.springframework.stereotype.Service;
import com.google.gson.Gson;
import com.rupeng.elasticsearch.primary.dto.query.Body;
import com.rupeng.elasticsearch.primary.dto.query.Fields;
import com.rupeng.elasticsearch.primary.dto.query.Highlight;
import com.rupeng.elasticsearch.primary.dto.query.Multi_match;
import com.rupeng.elasticsearch.primary.dto.query.Query;
import com.rupeng.elasticsearch.primary.dto.query.Root;
import com.rupeng.elasticsearch.primary.dto.query.Title;
import com.rupeng.elasticsearch.primary.dto.result.Hit;
import com.rupeng.elasticsearch.primary.dto.result.JsonRootBean;
import com.rupeng.utlis.CommonUtils;
import com.rupeng.utlis.EsUtils;
import com.rupeng.utlis.HTMLUtils;
import com.rupeng.utlis.JDBCUtils;
import com.rupeng.utlis.JsoupUtils;
import com.xyf.pojo.Movies;
/**
* 由于官方已经不再维护es transport客户端 那么,就应该使用 Rest客户端来进行开发
*
* @author 2016wlw2 徐塬峰 创建时间:2018年8月1日 上午9:22:47
*/
@Service
public class ElasticSearchRestFullService {
private static final Logger logger = LogManager.getLogger(
"------Rest ---Elastic操作日志------ 时间:" + new SimpleDateFormat("yy-MM-dd hh:mm:ss").format(new Date()));
/**
* rest client 基础查询 翻页查询 ---徐塬峰---
*/
public Map<String, Object> search(String text, int current, String type) {
if (CommonUtils.isEmpty(text) || CommonUtils.isEmpty(String.valueOf(current)) || current == 0) {
logger.debug("参数错误");
return null;
}
Gson gson = new Gson();
String method = "POST";
String endpoint = null;
endpoint = "/" + "xuanfengsearch" + "/" + type + "/_search?pretty";// 如果type不為null
/**
* 构建原生的json对象
*/
List<String> fields = new ArrayList<String>();
fields.add("title");// 设置索引的字段身体
Multi_match mul = new Multi_match();
mul.setFields(fields);
mul.setQuery(text);
Query query = new Query();
query.setMulti_match(mul);
/**
* 構建高亮查詢title boyd
*/
Title title = new Title();
title.setPre_tags("<span style=\"color:red\">");
title.setPost_tags("</span>");// 結束
Fields field = new Fields();
field.setTitle(title);
Highlight highlight = new Highlight();
highlight.setFields(field);
// 需要構建返回高亮的字段
Root root = new Root();
root.setQuery(query);
root.setHighlight(highlight);
int pageSize = 10;
int startSize = (current - 1) * 10;// 起点
root.setFrom(startSize);// 分页代码 设置起始位置
root.setSize(pageSize);// 设置返回的size 大小
Map<String, Object> msgMap = new HashMap<String, Object>();// 用于返回数据
RestClient restClient = EsUtils.getRestClient();
try {
HttpEntity entity = new NStringEntity(gson.toJson(root), ContentType.APPLICATION_JSON);
Response response;
response = restClient.performRequest(method, endpoint, Collections.<String, String> emptyMap(), entity);
JsonRootBean result = gson.fromJson(EntityUtils.toString(response.getEntity()), JsonRootBean.class);
List<Movies> data = new ArrayList<>();
for (Hit hit : result.getHits().getHits()) {
// 在这里将Project,添加
Movies p = new Movies();
// 有可能出现 搜索的时候title 是高亮字段 但是相应的body并不是的情况,反之亦然,所以要进行判断
p.setTitle(hit.getHighlight().returnTitle());
p.setIntroduce(hit.get_source().getIntroduce());
p.setDownload_url(hit.get_source().getDownload_url());
p.setImg_url(hit.get_source().getImg_url());
data.add(p);
}
// 如果当前返回的内容为空 则返回找不到相关的内容
if (startSize > result.getHits().getTotal() || result.getHits().getTotal() == 0) // 如果当前页面的起点大于了数据的总条数或者当前页的总条数为0
{
msgMap.put("message",
"<br/><br/><font size='5' color='#ff7300'>没有找到 </font><font size='3' color='#999'>关于“" + text
+ "”的内容</font>");
return msgMap;
}
long totalPages = result.getHits().getTotal() / pageSize;// 总页数
if (result.getHits().getTotal() % pageSize == 0) {
totalPages = result.getHits().getTotal() / pageSize;// 总页数
} else {
totalPages = result.getHits().getTotal() / pageSize + 1;// 总页数
}
msgMap.put("itemsList", data); // 搜索结果
msgMap.put("cur", current); // 分页
msgMap.put("totalPages", totalPages); // 分页
float took = result.getTook();// 多少毫秒
took = took / 1000;
msgMap.put("took", "为您找到" + result.getHits().getTotal() + "个结果,耗时" + took + "秒"); // 获取响应需要的时间
return msgMap;
} catch (IOException e) {
logger.error(e);
throw new RuntimeException(e);
} finally {
try {
if (restClient != null) {
restClient.close();
}
} catch (IOException e) {
logger.error(e);// 安靜的關閉
}
}
}
/**
* 创建一个分类索引库批量的插入
*/
public boolean createIndex(String indexType) {
long start = System.currentTimeMillis();
RestClient restClient = EsUtils.getRestClient();
ResultSet rs = null;
try {
System.out.println("select * from t_movies");
rs = JDBCUtils.executeQuery("select * from t_movies");
List<Movies> list = new ArrayList<Movies>();
while (rs.next()) {
Movies pl = new Movies();
pl.setId(rs.getLong("id"));
String body = JsoupUtils.getHtmlInnerText(rs.getString("introduce"));
body = HTMLUtils.delHTMLTag(body);
body = HTMLUtils.stripHtml(body);
String title = JsoupUtils.getHtmlInnerText(rs.getString("title"));
title = HTMLUtils.delHTMLTag(title);
title = HTMLUtils.stripHtml(title);
pl.setDownload_url(rs.getString("download_url"));
if(CommonUtils.isEmail(rs.getString("download_url")))
{
continue;
}
pl.setImg_url(rs.getString("img_url"));
if (CommonUtils.isEmpty(title))// 如果標題為空或為null 則無法進行索引
{
continue;
}
// 為了保證界面美觀
if (body != null) {
if (body.length() > 200)// 如果正文長度大於100 則切割
{
pl.setIntroduce(body.substring(0, 150) + "......");
} else {
pl.setIntroduce(body + "......");
}
} else {
pl.setIntroduce(body + "......");
}
if (title.length() > 40)// 如果標題長度大於40 則切割
{
pl.setTitle(title.substring(0, 40));
} else {
pl.setTitle(title);
}
list.add(pl);
if (list.size() >= 100) {
bulk(list, "xuanfengsearch", indexType, "create", restClient);// 当数据量为5000的时候提交一次
// 然后刷新list
list.clear();
logger.debug("已提交100条数据");
}
}
// 最後剩下的再提交一次
if (list.size() > 0) {
bulk(list, "xuanfengsearch", indexType, "create", restClient);
logger.debug("最後一次提交完成");
list.clear();
}
long end = System.currentTimeMillis();
logger.debug(indexType + "耗时" + (end - start) / 1000 + "秒");
return true;
} catch (SQLException e) {
logger.error(e);
throw new RuntimeException("数据库异常" + e);
} catch (Exception e) {
logger.error(e);
throw new RuntimeException("连接�
没有合适的资源?快使用搜索试试~ 我知道了~
基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目.zip
共238个文件
png:78个
js:38个
java:24个
0 下载量 139 浏览量
2023-09-04
14:57:03
上传
评论
收藏 2.36MB ZIP 举报
温馨提示
项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。项目真实可靠,源码都经测试过,能跑通,可用作本科毕业设计经测试过,请放心下载使用。
资源推荐
资源详情
资源评论
收起资源包目录
基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目.zip (238个子文件)
.classpath 2KB
org.eclipse.wst.common.component 655B
org.eclipse.wst.jsdt.ui.superType.container 49B
app.css 218KB
2bd3ac38.base.css 151KB
bt3.css 143KB
bootstrap.css 143KB
bootstrap.css 143KB
bootstrap.min.css 118KB
bootstrap.min.css 118KB
application-febb10a4ab803df13138ef8cf968c276.css 113KB
page-fast-news-60c1b0fb04288316f8b14bbbcc409bff.css 50KB
style.css 39KB
footer.css 29KB
bootstrap-theme.css 26KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
bootstrap-theme.min.css 23KB
index-333c111d2425c37d7bf1dd4bc9683dde.css 17KB
trumbowyg.css 14KB
sideslip.css 6KB
sideslip.css 6KB
biaoqian.css 1005B
detail.css 791B
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.eot 20KB
.gitattributes 174B
.gitignore 278B
icon.ico 4KB
icon.ico 4KB
ElasticSearchRestFullService.java 9KB
JDBCUtils.java 5KB
EsUtils.java 4KB
CommonUtils.java 3KB
CoreController.java 2KB
Movies.java 2KB
_source.java 2KB
HTMLUtils.java 2KB
Hit.java 1KB
JsonRootBean.java 962B
AjaxResult.java 945B
Hits.java 882B
Root.java 857B
Highlight.java 794B
_shards.java 763B
Query.java 666B
Title.java 570B
Body.java 539B
Fields.java 532B
JsoupUtils.java 524B
Multi_match.java 513B
Highlight.java 312B
Type.java 256B
Match_all.java 81B
7c49373d.login-bg.jpg 624KB
670974751893014737.jpg 66KB
payjpg.jpg 26KB
wechat.jpg 19KB
logo.jpg 3KB
echarts.js 457KB
application-eaced563fd377db4bc0a1994ddacf56c.js 312KB
jquery-v1.10.2.min.js 278KB
m.js 152KB
jquery.min.js 91KB
jquery-1.10.2.min.js 91KB
jquery-3.2.0.min.js 85KB
jquery-3.2.0.min.js 85KB
vds.js 81KB
bootstrap.js 68KB
bootstrap.js 68KB
trumbowyg.js 43KB
bootstrap.min.js 36KB
bootstrap.min.js 36KB
analytics.js 35KB
script-statics.js 34KB
nr-852.min.js 31KB
hm.js 31KB
bw-loader-411.4.5.js 17KB
include.postload.js 13KB
trumbowyg.upload.js 5KB
stat.js 3KB
trumbowyg.base64.js 3KB
ru.js 2KB
ko.js 2KB
pt.js 2KB
ca.js 2KB
fr.js 1KB
es_ar.js 1KB
fa.js 1KB
de.js 1KB
fi.js 1KB
zh_cn.js 1KB
trumbowyg.upload.min.js 1KB
trumbowyg.base64.min.js 731B
npm.js 484B
npm.js 484B
en.js 422B
.jsdtscope 626B
index.jsp 6KB
index.jsp 6KB
共 238 条
- 1
- 2
- 3
资源评论
c++服务器开发
- 粉丝: 3045
- 资源: 4463
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功