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 的值相等(按理来说这样的字段是需要拆表的,但是业务场景是 只有某些行相等 ) 在网上搜的一种办法是 先获取 ...
随机推荐
- es实现规格动态域生成
1.就是把sepc的可以提取出来作为一个域(sepc是一个规格参数) 封装搜索条件(跟jdbc流程一样) @requestparam( required = false) 的作用? 不传值后台也不 ...
- PyTorch Geometric(pyg)学习
参考2个链接: 第十六课.Pytorch-geometric入门(一)_tzc_fly的博客-CSDN博客_pytorch-geometric 第十七课.Pytorch-geometric入门(二)_ ...
- 用Bootstrap设计后端页面模板
<!doctype html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...
- e网通公告
title:用户须知titleend<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \&qu ...
- Winform帮助文档(C#打开chm定位到特定页面)国内最全总结写法。原文文档带翻译
下面比较啰嗦,只一句即可:Help.ShowHelp(null,"C:\help.hcm", HelpNavigator.Topic,"index.htm")方 ...
- NetBeans的一些快捷键
Alt + Insert getter 覆盖toString方法 Shift+ F6 运行当前文件 F6 运行当前项目 Tab 完成代码片段 ctrl+\ 代码补全 Alt + Shift + F格式 ...
- linux 安装goland
一.Goland-IDEA 2020.3.2安装 1 下载 下载GoLand https://www.jetbrains.com/go/download/#section=linux 2 安装Gola ...
- HIVE - HIVEQL学习笔记
Hive Learning HIVEQL和MYSQL最为接近 数据操作 SHOW TABLES IN crm_integration Show tables 'dim_con*' DESCRIBE E ...
- 【TensorFlow】Tensorflow-GPU 环境搭建教程(附 Windows 版本对应表及 CUDA GPU 计算能力表)
conda教程(推荐):『Tensorflow GPU Installation Made Easy: Use conda instead of pip [Update-2] | by Harveen ...
- csr_matrix与ndarray类型互转
ndarry 转 csr_matrix>>> import numpy as np>>> import scipy.sparse >>> my_m ...