package com.aron.blog.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.aron.blog.service.ElasticSearchService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.ResponseException;
import org.elasticsearch.client.RestClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.Map;
/**
* @author: Y-Aron
* @create: 2018-10-24 01:55
**/
@Service
@Slf4j
public class ElasticSearchServiceImpl implements ElasticSearchService {
private final RestClient client;
private static final String GET = "GET";
private static final String POST = "POST";
private static final String PUT = "PUT";
private static final String DELETE = "DELETE";
private static final String ID = "_id";
private static final String ACKNOWLEDGED = "acknowledged";
private static final String SEARCH = "_search";
private static final String UPDATE = "_update";
private static final String RESULT = "result";
private static final String DELETED = "deleted";
private static final int OK_CODE = 200;
private JSONObject DEFAULT_INDEX_SETTING = new JSONObject(){{
put("settings", new JSONObject(){{
put("number_of_shards", 3);
put("number_of_replicas", 1);
}});
}};
private enum ResultType {
ACKNOWLEDGED, IS_FOUND, IS_CREATED, IS_UPDATED
}
@Autowired
public ElasticSearchServiceImpl(RestClient client) {
this.client = client;
}
@Override
public JSONObject matchQuery(String index, String type, String json) {
try {
// 校验JSON格式是否正确 ~
JSON.parseObject(json);
// 默认查询所有列表
return query(index, type, json);
} catch (IOException e) {
log.error(e.getMessage());
return null;
} catch (JSONException e) {
log.error("JSON格式不正确~");
return null;
}
}
@Override
public JSONObject matchQuery(String index, String type, Map<String, ?> params) {
return null;
}
@Override
public String setSource(String index, String type, Object source) {
return this.setSource(index, type, null, source);
}
@Override
public String setSource(String index, String type, String id, Object source) {
String url = initUrl(index, type, id);
if (url == null) {
return null;
}
if (source == null) {
log.error("数据:{} 不为 null", source);
return null;
}
try {
String _id = baseSetSource(url, source, id);
if (_id != null) {
log.error("索引[{}]=>文档[{}]=>数据[{}]插入成功:ID[{}]", index, type, source, _id);
} else {
log.error("索引[{}]=>文档[{}]=>数据[{}]插入失败~", index, type, source);
}
return _id;
} catch (IOException e) {
log.error("索引[{}]=>文档[{}]=>数据[{}]插入失败:{}", index, type, source, e.getMessage());
return null;
}
}
@Override
public boolean buildIndex(String index, Map<String, ?> map) {
if (isIndexExist(index)) {
log.error("索引[{}]已存在~", index);
return false;
}
if (MapUtils.isNotEmpty(map)) {
DEFAULT_INDEX_SETTING.putAll(map);
}
HttpEntity entity = new NStringEntity(JSON.toJSONString(DEFAULT_INDEX_SETTING), ContentType.APPLICATION_JSON);
// put 请求 ES索引不支持大写
Request request = new Request(PUT, "/" + index.toLowerCase());
request.setEntity(entity);
try {
log.info("索引[{}]创建成功", index);
return (boolean) handlerResult(request, ResultType.ACKNOWLEDGED);
} catch (IOException e) {
log.error("索引[{}]创建失败:{}", index, e.getMessage());
return false;
}
}
@Override
public boolean buildIndex(String index) {
return this.buildIndex(index, null);
}
@Override
public boolean isIndexExist(String index) {
if (StringUtils.isEmpty(index)) {
log.error("索引[{}]不能为空~", index);
return false;
}
Request request = new Request(GET, "/" + index.toLowerCase());
try {
Response response = client.performRequest(request);
return response.getStatusLine().getStatusCode() == OK_CODE;
} catch (ResponseException e) {
// log.error("索引[{}]不存在~", index);
return false;
} catch (IOException e) {
log.error("连接失败:{}", e.getMessage());
return false;
}
}
@Override
public boolean deleteIndex(String index) {
if (!isIndexExist(index)) {
log.error("索引[{}]不存在~", index);
return false;
}
Request request = new Request(DELETE, "/" + index.toLowerCase());
try {
log.error("索引[{}]删除成功", index);
return (boolean) handlerResult(request, ResultType.ACKNOWLEDGED);
} catch (IOException e) {
log.error("索引[{}]删除失败:", index, e.getMessage());
return false;
}
}
@Override
public boolean delSource(String index, String type, String id) {
String url = initUrl(index, type, id);
if (url == null) {
return false;
}
if (StringUtils.isEmpty(id)) {
log.error("id[{}]不能为空~", id);
return false;
}
Request request = new Request(DELETE, url);
try {
log.error("索引[{}]=>文档[{}]=>ID[{}]删除成功", index, type, id);
return (boolean) handlerResult(request, ResultType.IS_FOUND);
} catch (IOException e) {
log.error("索引[{}]=>文档[{}]=>ID[{}]删除失败:{}", index, type, id, e.getMessage());
return false;
}
}
@Override
public boolean updateSource(String index, String type, String id, Object source) {
String url = initUrl(index, type, id);
if (url == null) {
return false;
}
JSONObject jsonObject = new JSONObject();
if (source.getClass().equals(String.class)) {
jsonObject.put("doc", JSON.parseObject((String) source));
} else {
jsonObject.put("doc", source);
}
HttpEntity entity = new NStringEntity(JSON.toJSONString(jsonObject), ContentType.APPLICATION_JSON);
Request request = new Request(POST, url + "/" + UPDATE);
request.setEntity(entity);
try {
String value = (String) handlerResult(request, ResultType.IS_UPDATED);
if ("noop".equals(value)) {
log.info("索引[{}]=>文档[{}]=>数据[{}]无更新~", index, type, source);
} else {
log.info("索引[{}]=>文档[{}]=>数据[{}]更新成功~", index, type, source);
}
return true;
} catch (IOException e) {
log.error("索引[{}]=>文档[{}]=>数据[{}]插入失败:{}", index, type, source, e.getMessage());
return false;
}
}
private Object handlerResult(Request request, ResultType type) throws IOException {
Response response = client.performRequest(r
没有合适的资源?快使用搜索试试~ 我知道了~
基于springboot实现的博客社区系统.zip
共83个文件
java:76个
yml:1个
xml:1个
0 下载量 19 浏览量
2023-08-16
15:35:50
上传
评论
收藏 116KB ZIP 举报
温馨提示
基于springboot实现的博客社区系统.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于springboot实现的博客社区系统.zip (83个子文件)
code_resource_1
mvnw.cmd 5KB
pom.xml 5KB
src
test
java
com
aron
blog
other
EmailTest.java 2KB
MongoTest.java 858B
SecurityTest.java 1KB
RedisTest.java 1KB
BlogApplicationTests.java 1KB
article
ArticlePipeline.java 671B
CSDNTest.java 3KB
BlogTest.java 2KB
Article.java 315B
WebMagicTest.java 2KB
es
ESTest.java 2KB
main
resources
application.yml 4KB
java
com
aron
blog
Application.java 400B
security
authentication
JWTLoginFilter.java 9KB
JwtAuthenticationFilter.java 3KB
CustomAuthentication.java 5KB
utils
JwtUserDetails.java 2KB
JwtUtils.java 5KB
RSACoder.java 6KB
AESCoder.java 3KB
WebSecurityConfig.java 4KB
service
CustomUserDetailService.java 3KB
exception
JWTAuthenticationEntryPoint.java 1KB
CustomAccessDeniedHandler.java 1KB
authorization
RestAccessDecision.java 2KB
aspect
HttpAspect.java 3KB
controller
TestController.java 2KB
IndexController.java 350B
UserController.java 1KB
GlobalExceptionHandler.java 2KB
WebController.java 2KB
utils
Utils.java 3KB
RestSmsUtils.java 4KB
SnowFlake.java 3KB
Captcha.java 4KB
IpUtils.java 2KB
VerifyUtil.java 3KB
SetUtils.java 302B
ResultUtils.java 1KB
service
PermissionService.java 393B
UserService.java 351B
SmsCodeService.java 163B
RoleService.java 305B
RedisService.java 1KB
LoggerService.java 67B
impl
RedisServiceImpl.java 3KB
UserServiceImpl.java 2KB
RonglianServiceImpl.java 2KB
PermissionServiceImpl.java 1KB
ElasticSearchServiceImpl.java 10KB
RoleServiceImpl.java 1KB
ElasticSearchService.java 2KB
domain
constant
RouteConstant.java 377B
WebConstant.java 374B
HttpMethodEnum.java 646B
LevelTypeEnum.java 559B
ResultTypeEnum.java 2KB
mapper
RolePermissionMapper.java 545B
UserMapper.java 636B
RoleMapper.java 812B
provider
PermissionSqlProvider.java 735B
PermissionMapper.java 1KB
entity
GlobalExecption.java 394B
Permission.java 316B
UserOrRole.java 253B
ResultBean.java 288B
Role.java 305B
RoleOrPermission.java 375B
WebLog.java 382B
User.java 349B
config
WebRestConfig.java 1KB
ElasticSearchConfig.java 2KB
RedisConfig.java 1KB
component
CustomCmdLineRunner.java 3KB
RonglianSmsCodeConfig.java 1KB
CacheConfig.java 4KB
DruidConfig.java 2KB
.mvn
wrapper
maven-wrapper.properties 110B
maven-wrapper.jar 46KB
mvnw 6KB
.gitignore 268B
共 83 条
- 1
资源评论
LeapMay
- 粉丝: 3w+
- 资源: 2305
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Linux常用命令及用法说明
- 基于Matlab的FFT频谱分析及IIR数字滤波器设计
- AutoCAD高压低压电气开关柜设备接线图图纸
- AutoCAD电气图纸建筑电气开关柜常用cad图纸
- 使用ASP.NET Core和Entity Framework Core来构建一个基本的进销存系统.rar
- 深度学习经典数据集+FER2013面部表情识别+附带使用方法的python代码
- Python中,要实现连接多个相机并识别多个二维码.rar
- 使用FFT算法对一个信号进行分析.rar
- 171cms游戏应用下载系统源码.zip
- 基于jsp+servlet+mysql蛋糕甜品店购物网站源码+数据库(期末大作业).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功