@Test
public void t15() throws IOException {
DeleteByQueryRequest request = new DeleteByQueryRequest(index);
request.types(type);
// 删除查询到到数据
request.setQuery(QueryBuilders.rangeQuery("fee").lt(5));
BulkByScrollResponse bulkByScrollResponse = ESUtils.getClient().deleteByQuery(request, RequestOptions.DEFAULT);
System.out.println(bulkByScrollResponse);
}
@Test
public void t16() throws IOException {
// 复合查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// should 表示 Or
boolQueryBuilder.should(QueryBuilders.termQuery("province", "武汉"));
boolQueryBuilder.should(QueryBuilders.termQuery("province", "北京"));
// 不是
boolQueryBuilder.mustNot(QueryBuilders.termQuery("operatorId","2"));
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolQueryBuilder);
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t17() throws IOException {
// boosting 查询可以帮助我们去影响查询后的 score; negativeBoost,指定系数,必须小于1.0
BoostingQueryBuilder boostingQueryBuilder = QueryBuilders.boostingQuery(
QueryBuilders.matchQuery("smsContent", "先生"),
QueryBuilders.matchQuery("smsContent", "李四")
).negativeBoost(0.2f);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boostingQueryBuilder);
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t18() throws IOException {
// filter, and
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.matchQuery("smsContent", "先生"));
boolQueryBuilder.filter(QueryBuilders.termQuery("province", "武汉"));
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolQueryBuilder);
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t19() throws IOException {
// 高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("smsContent");
// 指定高亮数据展示多少个字符回来
highlightBuilder.fragmentSize(20);
highlightBuilder.preTags("<font color='green'>");
highlightBuilder.postTags("</font>");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("smsContent", "中国"));
builder.highlighter(highlightBuilder);
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
HighlightField highlightField = highlightFields.get("smsContent");
System.out.println(highlightField);
}
}
@Test
public void t20() throws IOException {
SearchSourceBuilder builder = new SearchSourceBuilder();
// 去重计数
builder.aggregation(AggregationBuilders.cardinality("agg").field("province"));
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
Aggregations aggregations = search.getAggregations();
Cardinality agg = aggregations.get("agg");
System.out.println(agg.getValue());
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t21() throws IOException {
// 范围计数, 某个值在范围内出现次数
RangeAggregationBuilder field = AggregationBuilders.range("agg").field("fee");
// 3 - 5之间,不包含
field.addRange(3, 5);
// 大于等于5
field.addUnboundedFrom(5);
// 小于等于3
field.addUnboundedTo(3);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.aggregation(field);
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
Aggregations aggregations = search.getAggregations();
Range agg = aggregations.get("agg");
List<? extends Range.Bucket> buckets = agg.getBuckets();
for (Range.Bucket bucket : buckets) {
System.out.println("-- --");
System.out.println(bucket.getFrom());
System.out.println(bucket.getTo());
System.out.println(bucket.getKeyAsString());
System.out.println("计数为:" + bucket.getDocCount());
System.out.println("-- --");
}
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t22() throws IOException {
//聚合函数, 最大最小 平均 和
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.aggregation(AggregationBuilders.extendedStats("agg").field("fee"));
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
Aggregations aggregations = search.getAggregations();
ExtendedStats agg = aggregations.get("agg");
System.out.println(agg.getMax());
System.out.println(agg.getMinAsString());
System.out.println("平均: " + agg.getAvg());
System.out.println(agg.getSum());
System.out.println("平方和: " + agg.getSumOfSquares());
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
@Test
public void t23() throws IOException {
// 地图检索
// geo_distance 点 半径 圆
// geo_bounding_box 以两个点确定一个矩形,获取在矩形内的全部数据
// geo_polygon 以多个点,确定一个多边形,获取多边形内的全部数据
SearchSourceBuilder builder = new SearchSourceBuilder();
List<GeoPoint> objects = new ArrayList<>();
objects.add(new GeoPoint(39.99878,116.298916));
objects.add(new GeoPoint(39.972576,116.29561));
objects.add(new GeoPoint(39.984739,116.327661));
builder.query(QueryBuilders.geoPolygonQuery("location", objects));
SearchRequest request = new SearchRequest(index);
request.types(type);
request.source(builder);
SearchResponse search = ESUtils.getClient().search(request, RequestOptions.DEFAULT);
System.out.println(search.getHits().getHits().length);
// 结果
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
复制
文章转载自java小小小小栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
阿里云大数据AI技术
376次阅读
2025-04-18 10:24:15
AI 乱写代码怎么破?使用 Context7 MCP Server 让 AI 写出靠谱代码!
Se7en的架构笔记
113次阅读
2025-04-29 09:53:31
阿里云 Elasticsearch Serverless 检索增强型8.17版免费邀测!
阿里云大数据AI技术
66次阅读
2025-04-15 13:18:15
利用 EDB Postgres AI - WarehousePG 替换 Greenplum 实现数据仓库现代化
新智锦绣
62次阅读
2025-04-18 17:28:36
Java萌新修炼手册⑥:面向对象の修仙奥义——从"散修"到"宗门大佬"的基因飞升!
让天下没有难学的编程
37次阅读
2025-04-25 10:10:40
PGD4K 正式版发布!同时支持 Kubernetes 和 Openshift 平台
新智锦绣
34次阅读
2025-04-25 10:10:43
为流复制优化TCP设置
新智锦绣
33次阅读
2025-04-10 11:52:27
Java数据库连接池学习
淡定
31次阅读
2025-04-14 22:46:26
炸裂!又一个AI大模型的新方向,彻底爆了!!
铭毅天下Elasticsearch
28次阅读
2025-04-16 10:33:42
从 Java 到 Go:面向对象的巨人与云原生的轻骑兵
京东云开发者
27次阅读
2025-04-25 11:41:37