elasticsearch 根据主键_id更新部分字段
package com.better517na.ebookingbusiservice.helper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.better517na.component.security.utils.GsonUtil;
import com.better517na.ebookingbusiservice.model.contracthotel.ContractHotelHitVo;
import com.better517na.ebookingbusiservice.util.LogUtils;
import com.better517na.component.security.utils.StringUtil;
import com.google.common.reflect.TypeToken;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
/**
* @author lulin
* @project: ebookingbusiservice
* @description EsHelper
* @date 2021/09/24 11:17
**/
@Component
public class EsHelper {
private static RestHighLevelClient restClient;
@Resource(name = "contractHotelRestClient")
public void setProductRestClient(RestHighLevelClient restClient) {
EsHelper.restClient = restClient;
}
/**
* 查询
*
* @param contractNo
* @param hotelId
* @return
* @throws IOException
*/
public static List<ContractHotelHitVo> queryContractHotelList(String contractNo, String hotelId) throws IOException {
if (StringUtil.isEmptyOrNull(contractNo) || StringUtil.isEmptyOrNull(hotelId)) {
return new ArrayList<>();
}
int from = 0;
int size = 200;
int totalHits = 0;
List<ContractHotelHitVo> resp = new ArrayList<>();
String index = "contract_hotel";
if (StringUtil.isEmptyOrNull(index)) {
return new ArrayList<>();
}
SearchRequest request = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.from(from);
sourceBuilder.size(size);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
boolBuilder.must(QueryBuilders.termQuery("isDelete", 0));
boolBuilder.must(QueryBuilders.matchQuery("contactno", contractNo).operator(Operator.AND));
boolBuilder.must(QueryBuilders.matchQuery("hotelIDs", hotelId));
sourceBuilder.query(boolBuilder);
request.source(sourceBuilder);
SearchResponse search = restClient.search(request, RequestOptions.DEFAULT);
if (search.status() != RestStatus.OK || search.getHits().getTotalHits().value <= 0) {
return new ArrayList<>();
}
totalHits = (int) search.getHits().getTotalHits().value;
List<ContractHotelHitVo> collect = Arrays.stream(search.getHits().getHits()).map(p -> {
ContractHotelHitVo contractHotelHitVo = JSON.parseObject(JSON.toJSONString(p.getSourceAsMap()), ContractHotelHitVo.class);
contractHotelHitVo.setEsId(p.getId());
return contractHotelHitVo;
}).collect(Collectors.toList());
resp.addAll(collect);
from += size;
while (from < totalHits) {
sourceBuilder.from(from);
SearchResponse response1 = restClient.search(request, RequestOptions.DEFAULT);
if (response1 == null || response1.status() != RestStatus.OK || response1.getHits().getTotalHits().value < 0) {
return resp;
}
List<ContractHotelHitVo> resp1 = Arrays.stream(response1.getHits().getHits()).map(p -> {
ContractHotelHitVo contractHotelHitVo = JSON.parseObject(JSON.toJSONString(p.getSourceAsMap()), ContractHotelHitVo.class);
contractHotelHitVo.setEsId(p.getId());
return contractHotelHitVo;
}).collect(Collectors.toList());
resp.addAll(resp1);
from += size;
}
return resp;
}
/**
* 批量更新酒店产品
*
* @param
* @return
*/
public static boolean updateHotelProdects(ContractHotelHitVo contractHotelHitVo) {
if (contractHotelHitVo == null) {
return true;
}
try {
String index = "contract_hotel";
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest("_all");
UpdateRequest updateRequest = new UpdateRequest(index, contractHotelHitVo.getEsId()).doc(jsonBuilder().startObject().field("data", contractHotelHitVo.getData())
.field("modifyStaff", contractHotelHitVo.getModifyStaff())
.field("modifyStaffName", contractHotelHitVo.getModifyStaffName())
.field("modifyTime", contractHotelHitVo.getModifyTime())
.endObject());
UpdateResponse updateResponse = restClient.update(updateRequest, RequestOptions.DEFAULT);
if (updateResponse.getResult().toString().equals("UPDATED") || updateResponse.getResult().toString().equals("NOOP")) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
LogUtils.writeExceptionLog(e, "updateHotelPriceInfos");
return false;
}
return false;
}
}
elasticsearch 根据主键_id更新部分字段的更多相关文章
- mysql死锁-非主键索引更新引起的死锁
背景:最近线上经常抛出mysql的一个Deadlock,细细查来,长了知识! 分析:错误日志如下: 21:02:02.563 ERROR dao.CommonDao [pool-15-t ...
- mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid"> insert into user_id ...
- powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键
转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...
- mysql 5.7中 count(0) count(*) count(主键) count(非空字段)效率比较
mysql count(0) count(*) count(主键) count(非空字段) 效率比较 写代码的时候经理在背后说了一句count(0)的效率高于count(*) ,索性全部测试了一下 结 ...
- 支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb)
支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除, ...
- 【Mongodb】后台主键_id自增(Java版本)
ObjectId的选择 创建MongoDB文档时,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成.得到的ObjectId类似于这种 ObjectId使用12字节的存储空间, ...
- Mybatis中使用UpdateProvider注解实现根据主键批量更新
Mapper中这样写: @UpdateProvider(type = SjjcSqlProvider.class, method = "updateTaskStatusByCBh" ...
- 【mybatis-plus】主键id生成、字段自动填充
一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UU ...
- 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段
原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...
- MySQL 插入与自增主键值相等的字段 与 高并发下保证数据准确的实验
场景描述: 表t2 中 有 自增主键 id 和 字段v 当插入记录的时候 要求 v与id 的值相等(按理来说这样的字段是需要拆表的,但是业务场景是 只有某些行相等 ) 在网上搜的一种办法是 先获取 ...
随机推荐
- java判断上传图片格式
由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1----进入JPG格式判断....." ...
- 软件工程实践总结&个人技术博客
这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求 这个作业的目标 总结课程与学到的技术回顾课程 其他参考文献 <构建之法><软件质量和测试> 目录 课程回顾与总结 ...
- ctfshow web入门 命令执行 37-39
37-39 基于 GET 传参的 include() 38.39 是 37 的变种 分析 伪协议常用于文件包含漏洞中 文件包含函数有:include.include_once.require.requ ...
- 【离线数仓环境搭建】安装linux及安装JDK
创建新的虚拟机 配置网络 安装vim sudo yum install -y vim 修改免密 sudo vim /etc/sudoers (执行安装命令的时候,不再需要输入密码) 查看防火墙状态 s ...
- MyBatis_09(逆向工程)
MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表.Hibernate是支持正向工程的 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: J ...
- Adobe Acrobat PDF Reader DC软件下载
安装包下载 https://get.adobe.com/en/reader/enterprise/ ftp下载,按日期排序 ftp://ftp.adobe.com/pub/adobe/reader/w ...
- QT管理网络状态和网络连接
参考:http://www.cleartechfei.com/2020/07/qt%E4%BD%BF%E7%94%A8http%E5%8D%8F%E8%AE%AE/ 1. 用Qt框架进行应用开发的过程 ...
- windows 2012 打补丁升级后不能启动处理
如果可以进入WinRE这个修复的高级选项,选择安全模式,是否可以进入,卸载最近安装的补丁,再重启看一下. 如果无法进入安全模式的话,那么选择cmd模式,使用下方命令.这通常会回退pending的upd ...
- mysql企业常用集群架构
转自 https://blog.csdn.net/kingice1014/article/details/76020061 1.mysql企业常用集群架构 在中小型互联网的企业中.mysql的集群一般 ...
- linux kernel 常用函数记录
offsetof是用来判断结构体中成员的偏移位置 container_of宏用来根据成员的地址来获取结构体的地址 bitwise 是用来确保不同位方式类型不会被弄混 (小端模式,大端模式,cpu 尾模 ...