暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java 操作 ElasticSearch 的更多查询

java小小小小栈 2021-02-27
589




@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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论