目录
[Elasticsearch02-01.DSL 查询 - 快速入门](#Elasticsearch02-01.DSL 查询 - 快速入门)
[Elasticsearch02-02.DSL 查询 - 叶子查询](#Elasticsearch02-02.DSL 查询 - 叶子查询)
[Elasticsearch02-03.DSL 查询 - 复合查询](#Elasticsearch02-03.DSL 查询 - 复合查询)
[Elasticsearch02-04.DSL 查询 - 排序和分页](#Elasticsearch02-04.DSL 查询 - 排序和分页)
[Elasticsearch02-05.DSL 查询 - 深度分页问题](#Elasticsearch02-05.DSL 查询 - 深度分页问题)
[Elasticsearch02-06.DSL 查询 - 高亮显示](#Elasticsearch02-06.DSL 查询 - 高亮显示)
[Elasticsearch02-07.JavaRestClient 查询 - 快速入门](#Elasticsearch02-07.JavaRestClient 查询 - 快速入门)
[Elasticsearch02-08.JavaRestClient 查询 - 构建查询条件](#Elasticsearch02-08.JavaRestClient 查询 - 构建查询条件)
[Elasticsearch02-09.JavaRestClient 查询 - 排序和分页](#Elasticsearch02-09.JavaRestClient 查询 - 排序和分页)
[Elasticsearch02-10.JavaRestClient 查询 - 高亮显示](#Elasticsearch02-10.JavaRestClient 查询 - 高亮显示)
[Elasticsearch02-11. 聚合 - 聚合的分类](#Elasticsearch02-11. 聚合 - 聚合的分类)
[Elasticsearch02-12. 聚合 - DSL 实现聚合](#Elasticsearch02-12. 聚合 - DSL 实现聚合)
[Elasticsearch02-13. 聚合 - Java 客户端实现聚合](#Elasticsearch02-13. 聚合 - Java 客户端实现聚合)
Elasticsearch02-01.DSL 查询 - 快速入门



Elasticsearch02-02.DSL 查询 - 叶子查询




Elasticsearch02-03.DSL 查询 - 复合查询




Elasticsearch02-04.DSL 查询 - 排序和分页





Elasticsearch02-05.DSL 查询 - 深度分页问题


Elasticsearch02-06.DSL 查询 - 高亮显示



Elasticsearch02-07.JavaRestClient 查询 - 快速入门



Elasticsearch02-08.JavaRestClient 查询 - 构建查询条件





问题:什么时候用must?什么时候用filter?
关键词搜索、全文匹配、需要排序must 城市、价格、状态、范围、精确筛选filter既要搜索又要过滤must + filter 组合
全文搜索用 must,条件过滤用 filter!
问题:如何将一段代码抽取为公共方法?
ctrl+alt+m

Elasticsearch02-09.JavaRestClient 查询 - 排序和分页

java
@Test
void testPageAndSort() throws IOException {
int pageNo = 1, pageSize = 5;
// 1.创建Request
SearchRequest request = new SearchRequest("items");
// 2.组织请求参数
// 2.1.搜索条件参数
request.source().query(QueryBuilders.matchQuery("name", "脱脂牛奶"));
// 2.2.排序参数
request.source().sort("price", SortOrder.ASC);
// 2.3.分页参数
request.source().from((pageNo - 1) * pageSize).size(pageSize);
// 3.发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析响应
handleResponse(response);
}
Elasticsearch02-10.JavaRestClient 查询 - 高亮显示



java
@Test
void testHighlight() throws IOException {
// 1.创建Request
SearchRequest request = new SearchRequest("items");
// 2.组织请求参数
// 2.1.query条件
request.source().query(QueryBuilders.matchQuery("name", "脱脂牛奶"));
// 2.2.高亮条件
request.source().highlighter(
SearchSourceBuilder.highlight()
.field("name")
.preTags("<em>")
.postTags("</em>")
);
// 3.发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 4.解析响应
handleResponse(response);
}
Elasticsearch02-11. 聚合 - 聚合的分类


Elasticsearch02-12. 聚合 - DSL 实现聚合



Elasticsearch02-13. 聚合 - Java 客户端实现聚合


java
@Test
void testAgg() throws IOException {
// 1.创建Request
SearchRequest request = new SearchRequest("items");
// 2.准备请求参数
BoolQueryBuilder bool = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("category", "手机"))
.filter(QueryBuilders.rangeQuery("price").gte(300000));
request.source().query(bool).size(0);
// 3.聚合参数
request.source().aggregation(
AggregationBuilders.terms("brand_agg").field("brand").size(5)
);
// 4.发送请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 5.解析聚合结果
Aggregations aggregations = response.getAggregations();
// 5.1.获取品牌聚合
Terms brandTerms = aggregations.get("brand_agg");
// 5.2.获取聚合中的桶
List<? extends Terms.Bucket> buckets = brandTerms.getBuckets();
// 5.3.遍历桶内数据
for (Terms.Bucket bucket : buckets) {
// 5.4.获取桶内key
String brand = bucket.getKeyAsString();
System.out.print("brand = " + brand);
long count = bucket.getDocCount();
System.out.println("; count = " + count);
}
}
末尾页
摘要:本文介绍了Elasticsearch的DSL查询和Java客户端操作,包括叶子查询、复合查询、排序分页、高亮显示等核心功能。重点讲解了must和filter的使用场景:must用于全文搜索和关键词匹配,filter适用于精确筛选和范围查询。同时提供了代码重构技巧(Ctrl+Alt+M抽取公共方法)以及聚合功能的实现方式。最后还提及了深度分页问题的处理方案,为Elasticsearch的查询操作提供了全面指导。