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中创建线程的方式和线程中常用方法?
Java中如何创建线程? 继承Thread类 实现Rnnable接口 实现Callable接口 通过线程池创建线程 线程中常用方法 线程等待:wait() 进入等待状态,只有等其他线程唤醒或中断才能运 ...
- 看不见的的html
1. meta标签自动刷新/跳转 实现定时跳转功能:除了设置定时器外 可以 <meta http-equiv="Refresh" content="5" ...
- 嵌在Android app的html 拨打不了电话,发送不了短信
html嵌在app里面的 <a href="tel:xxx"></a> <a href="sms:phoneNmber?body=1111& ...
- Jmeter学习:文件类函数
一.__StringFromFile 功能介绍: 从文件中读取一行数据,所有线程共享行数,依次读取,默认路径为$JMETER_HOME/bin/ ${__StringFromFile(参数 1,参数 ...
- vue3文档学习
1.vue的核心功能 1.声明式渲染2.响应性: vue会自动跟踪JavaScript状态并在其发生变化时响应式的更新DOM. 2.渐进式框架 根据不同的需求场景,可以用不同的方式使用vue: 1.无 ...
- tidb 杂记
tidb_biuil_stats_concurrency 执行analyze table时会分成多个小任务,可以同时执行的任务数量.tidb_distsql_scan_concurrency 在执行分 ...
- git常见问题集合
注1:问题总结来自于实际使用,关于搜到的资料链接一并粘贴; 场景1:GIT本地代码处于detached HEAD的情况(又称游离状态)的解决办法; 问题:有时候git由于一些操作的问题出现了detac ...
- NDK 减少 so 库体积方法总结
. 使用 strip 使用 NDK toolchain 可以把调试的 C++ 符号表(Symbol Table)中数据删除,我们一般我们打成 APK 会自动帮我们做这个工作,当然也可以手动设置: 手动 ...
- mac Big Sur 打开应用提示,您没有权限来打开应用程序
终端输入codesign --force --deep --sign - /Applications/{AppName.app}注意{AppName.app} 替换为无法打开的应用程序名,将尝试强制签 ...
- css 选择器再学一遍记录一下*1
1 <!DOCTYPE html> 2 <html> 3 <HEAD> 4 5 <style> 6 *{font-size: 12px; padding ...