zoukankan      html  css  js  c++  java
  • 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;
    }
    }
  • 相关阅读:
    关于WM_CTLCOLOREDIT的处理的一些问题
    Duilib非官方更新贴~
    一个非常简单的返回局部字符数组的C语言程序, 请问其输出结果?
    更改Windows控制台默认缓冲区行数和宽度
    最新版Duilib在VS2012下编译错误的解决方法
    记C语言浮点数运算处理 "坑" 一则
    修改stb_image.c以让Duilib直接支持Ico格式的图标显示
    一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
    编程调节Win7/Win8系统音量的一种方法
    分享一个最近研究的手机QQ3.0的协议(版本1.4)
  • 原文地址:https://www.cnblogs.com/lstcJaney/p/15353442.html
Copyright © 2011-2022 走看看