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更新部分字段的更多相关文章

  1. mysql死锁-非主键索引更新引起的死锁

    背景:最近线上经常抛出mysql的一个Deadlock,细细查来,长了知识! 分析:错误日志如下: 21:02:02.563 ERROR dao.CommonDao        [pool-15-t ...

  2. mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id ...

  3. powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键

    转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...

  4. mysql 5.7中 count(0) count(*) count(主键) count(非空字段)效率比较

    mysql count(0) count(*) count(主键) count(非空字段) 效率比较 写代码的时候经理在背后说了一句count(0)的效率高于count(*) ,索性全部测试了一下 结 ...

  5. 支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb)

    支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除, ...

  6. 【Mongodb】后台主键_id自增(Java版本)

    ObjectId的选择 创建MongoDB文档时,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成.得到的ObjectId类似于这种   ObjectId使用12字节的存储空间, ...

  7. Mybatis中使用UpdateProvider注解实现根据主键批量更新

    Mapper中这样写: @UpdateProvider(type = SjjcSqlProvider.class, method = "updateTaskStatusByCBh" ...

  8. 【mybatis-plus】主键id生成、字段自动填充

    一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UU ...

  9. 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段

    原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...

  10. MySQL 插入与自增主键值相等的字段 与 高并发下保证数据准确的实验

    场景描述: 表t2 中 有 自增主键 id  和 字段v  当插入记录的时候 要求 v与id 的值相等(按理来说这样的字段是需要拆表的,但是业务场景是 只有某些行相等 ) 在网上搜的一种办法是 先获取 ...

随机推荐

  1. Neural Network模型复杂度之Residual Block - Python实现

    背景介绍 Neural Network之模型复杂度主要取决于优化参数个数与参数变化范围. 优化参数个数可手动调节, 参数变化范围可通过正则化技术加以限制. 本文从优化参数个数出发, 以Residual ...

  2. 【服务器数据恢复】热备盘同步失败导致数据丢失的raid5数据恢复案例

    服务器数据恢复环境:华为s系列服务器:24块硬盘组成一组raid5磁盘阵列,其中包含1块热备盘. 服务器故障&检测:服务器工作状态下raid5中有一块硬盘离线,热备盘激活替换离线硬盘并开始进行 ...

  3. Dell CS24-SC 服务器详情

    详情介绍: https://www.viziotech.com/servers/58-dell-cs24-sc-dual-xeon-quad-core-l5420-25ghz-16gb-4x146gb ...

  4. 洛谷 P5721 【入门3】循环结构

    P5723 [深基4.例13]质数口袋 1.题目描述 小 A 有一个质数口袋,里面可以装各个质数.他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋. 口袋的负载量就是口袋 ...

  5. C# RGB转Brush

    C#中自定义一个Brush,使用Color赋RGB值给Brush: dataGrid2.HorizontalGridLinesBrush = new SolidColorBrush(System.Wi ...

  6. ToLua中判断引用的C#对象是否为nil

    C#层对象已经删除了,但是lua层判断不为nil.然后lua调用了,又会报nil的错误. 这里提供了一种判断方式. lua里的判断.这个Util.IsNull()是C#层代码. function He ...

  7. 关于SaaS的图

  8. Django新版本报错问题解决

    在创建app的时候会报如下错误: python3 manage.py startapp test django.core.exceptions.ImproperlyConfigured: SQLite ...

  9. 如何把高德地图搜索商家电话资料导出成excel里?

    有很多人问我地图商家结果采集怎么做? 怎么样能够快速的把高德地图左边的搜索列表里的商家地图,电话,导出到EXCEL里. 如何快速地将高德地图里的商家电话资料导出EXCEL? 操作步骤: 1. 选择你要 ...

  10. 接口拿到的id和传到后台的id不一致,导致查询详情和编辑报错

    碰到这个问题真是百思不得其解.接口上打印的值和数据库一致,浏览器查看response的反馈也一致.但是一在页面打印请求回来的值,就变了,变成了另一个id,但是其他数据又和数据库一致. 查了一圈也没有查 ...