引用:
@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(); Listgroup by - 单字段 ps:没有用这个测试过多字段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(条件);
// 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(); Listmusts = 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}



