栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 数据挖掘与分析

Java实现ES增删改查

Java实现ES增删改查

引用:

@Autowired
private JestClient jestClient;
Bulk.Builder bulk = new Bulk.Builder().defaultIndex(INDEX).defaultType(TYPE);

//组装参数   refresh(true) 不配置 新增之后 约2秒之后才可以查询到该新增数据
// Builder的实体 需json字符串
Index index = new Index
        .Builder(JSON.toJSonString(dto))
        .id(dto.getId())
        .build();
bulk.addAction(index).refresh(true);

// 改用 BulkResult 分析每条插入情况
BulkResult jestResult;
int result = 0;

try {
    //es增加操作
    jestResult = jestClient.execute(bulk.build());
} catch (IOException ex) {   
}

//统计新增数
if (jestResult != null && jestResult.isSucceeded()) {
    JsonObject jsonObject = jestResult.getJsonObject();
    JsonArray hitsOut = jsonObject.get("items").getAsJsonArray();
    // 新增数
    result = hitsOut.size();
}
删 
Delete delete = new Delete.Builder("主键").index(INDEX).type(TYPE).build();
JestResult jestResult = jestClient.execute(delete)
 if (jestResult.isSucceeded()) {

    //删除成功 

 }

 第一种: 主键修改
 Update update = new Update.Builder("修改json实体").index(INDEX).type(TYPE).id("主键").build();

JestResult result = jestClient.execute(update);

第二种:多where条件修改
//效果  update 表名 set 字段1 = ?,字段2 = ? where id = ? and 条件1 and 条件2

String BILL_DELETE_script_STR = "ctx._source.ISDEL=params.ISDEL;ctx._source.UPDATEDAT=params.UPDATEDAT";

// 拼接筛选参数
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
List mustList = queryBuilder.filter();
mustList.add(QueryBuilders.termQuery("USERID", billBatchDeleteReqDTO.getUserId()));
//修改的字段
HashMap params = new HashMap<>();
params.put("ISDEL",true);
params.put("UPDATEDAT",new Date());

try {
    UpdateByQuery.Builder updateByQuery = setUpdateBuilder(queryBuilder, BILL_DELETE_script_STR, params);
    JestResult jestResult = jestClient.execute(updateByQuery.refresh(true).build());
    if (jestResult.isSucceeded()) {
        //修改成功
    }
} catch (IOException ex) {

  }
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
List musts = queryBuilder.must();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//where条件
QueryBuilder auditStateQueryBuilder = QueryBuilders.termQuery("USERID", userId);
musts.add(auditStateQueryBuilder);

//非分页版
searchSourceBuilder.query(queryBuilder).timeout(Timevalue.timevalueSeconds(5));
  
//分页版


Search search = new Search
               .Builder(searchSourceBuilder.toString())
               .addIndex(INDEX)
               .addType(TYPE)
               .build();
try {
    JestResult result = jestClient.execute(search);

    if (result.isSucceeded()) {
      JsonObject jsonObject = result.getJsonObject();
      JsonObject hitsOut = jsonObject.get("hits").getAsJsonObject();
      JsonArray hits = hitsOut.get("hits").getAsJsonArray();
    for (JsonElement hit : hits) {
         JsonElement source = hit.getAsJsonObject().get("_source");
         实体 billRecordsReqDTO = JSON.parseObject(source.toString(), 实体.class);
     }
    }
} catch (Exception ex) {
   //记录异常
}
查扩展 
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
List musts = queryBuilder.filter();
List mustNot = queryBuilder.mustNot();

//完全匹配    字段 = 值
 musts.add(QueryBuilders.termQuery("Boolean类型", true));
 musts.add(QueryBuilders.termQuery("String类型", "字符串"));
 musts.add(QueryBuilders.termQuery("数值类型", 数值));
 musts.add(QueryBuilders.termsQuery("集合", 集合));

//模糊匹配    字段1 like 'like%'
QueryBuilders.prefixQuery(字段, "条件")
//模糊的这些也可以  matchQuery matchPhraseQuery matchPhrasePrefixQuery 待测试..

//判空 字段 is null
musts.add(QueryBuilders.existsQuery(字段))

//非空 字段 is not null
mustNot.add(QueryBuilders.existsQuery(字段))

//对比  大于  小于   gte: ≥  gt:>  let:≤ lt:<
RangeQueryBuilder ticketPriceQueryBuilder = QueryBuilders.rangeQuery(字段);
  ticketPriceQueryBuilder = ticketPriceQueryBuilder.gte(条件);
  ticketPriceQueryBuilder = ticketPriceQueryBuilder.lte(条件);




 

group by - 单字段  ps:没有用这个测试过多字段
// select count(字段) from 表名  GROUP BY 字段

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        BoolQueryBuilder boolQueryUnCompleted = QueryBuilders.boolQuery()
                .filter(QueryBuilders.termQuery(字段, value);

        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
                .must(boolQueryUnCompleted);

        String queryJson = searchSourceBuilder.query(boolQuery).toString();
        Count count = new Count.Builder().query(queryJson).addIndex(INDEX).addType(TYPE).build();

        CountResult countResult;
        try {
            countResult = jestClient.execute(count);
        } catch (IOException e) {
          
        }

group by  - 多字段
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
List musts = queryBuilder.must();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();


//相当于 ORDER BY TradeStatus,orderStatus
//分组字段1
TermsAggregationBuilder orderSatesCountBuilder = AggregationBuilders.terms("orderSatesCount").field("ORDERSTATUS");

//分组字段2
TermsAggregationBuilder tradeSatesCountBuilder = AggregationBuilders.terms("tradeSatesCount").field("TRADESTATUS");
searchSourceBuilder.aggregation(orderSatesCountBuilder);

//size = 0 是为了防止es返回详细的票据详细 --不需要具体的票据信息 不知道怎么解决
searchSourceBuilder.aggregation(tradeSatesCountBuilder).size(0);

Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex("tickets").addType("_doc").build();

JestResult result;
        try {
            result = jestClient.execute(search);
            LOGGER.info("ES获取订单数量响应:{}", result);
        } catch (Exception ex) {
            LOGGER.error("订单ES访问失败,原因:{}", ex.getMessage(), ex);
            return null;
        }

if (result != null && result.isSucceeded()) {
            JsonObject jsonObject = result.getJsonObject();
            JsonObject hitsOut = jsonObject.get("aggregations").getAsJsonObject();
            JsonObject tradeSatesCount = hitsOut.get("tradeSatesCount").getAsJsonObject();
            JsonObject orderSatesCount = hitsOut.get("orderSatesCount").getAsJsonObject();
            JsonArray tradeSatesMap = tradeSatesCount.get("buckets").getAsJsonArray();
            JsonArray orderSatesMap = orderSatesCount.get("buckets").getAsJsonArray();

            for (JsonElement hit : tradeSatesMap) {
                long count = hit.getAsJsonObject().get("doc_count").getAsLong();
            }

            for (JsonElement hit : orderSatesMap) {
                long count = hit.getAsJsonObject().get("doc_count").getAsLong();
                }
            }
        }

group by 分组 es语句版

//日期格式  "time_zone":"Asia/Shanghai" 中国时区

{"size":0,"aggs":{"addtime":{"date_histogram":{"field":"字段","calendar_interval":"day","time_zone":"Asia/Shanghai","min_doc_count":1}}}}

//非日期格式
{"query":{"bool":{"must":[{"bool":{"filter":[{"term":{"字段":{"value":4,"boost":1}}}],"disable_coord":false,"adjust_pure_negative":true,"boost":1}}],"disable_coord":false,"adjust_pure_negative":true,"boost":1}},"size":0}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/279083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号