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

相关推荐
咖啡八杯16 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
lizhongxuan17 小时前
AI Agent 上下文压缩利器 Headroom
后端
Csvn20 小时前
SSH 远程管理与安全加固 — 运维的守门之道
后端
IT_陈寒20 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
菜鸟谢21 小时前
Rust 智能指针完整详解
后端
菜鸟谢21 小时前
Rust 函数完整知识点详解
后端
爱勇宝1 天前
淡泊名利之前,先承认我们都很焦虑
前端·后端·程序员
菜鸟谢1 天前
Rust 闭包(Closure)完整详解
后端
ServBay1 天前
如何利用本地技术栈构建 0 成本 AI SaaS 雏形
后端·aigc·ai编程
菜鸟谢1 天前
Rust 集合 + 迭代器完整详解
后端