springCloud(day09-Elasticsearch02)

目录

[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 查询 - 构建查询条件)

问题:什么时候用must?什么时候用filter?

问题:如何将一段代码抽取为公共方法?

[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的查询操作提供了全面指导。

相关推荐
东风破_3 小时前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
微尘寒风4 小时前
【Git】的安装和使用
java·git
东风破_4 小时前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
y = xⁿ4 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
东风破_4 小时前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js
侧耳倾听1115 小时前
jwt使用简介
java·jwt
顶点多余5 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手5 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神6 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
2601_962066496 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库