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 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
别动我齐刘海4 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈4 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan4 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan5 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
code2cat5 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe5 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码5 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
WeiXin_DZbishe6 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计