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

相关推荐
橘子编程2 小时前
计算机内存与缓存完全指南
java·计算机网络·spring·缓存
@atweiwei2 小时前
用 Rust 构建 LLM 应用的高性能框架
开发语言·后端·ai·rust·langchain·llm
云烟成雨TD2 小时前
Spring AI 1.x 系列【24】结构化输出 API
java·人工智能·spring
han_hanker2 小时前
springboot 不推荐使用@Autowired怎么处理
java·spring boot·后端
最初的↘那颗心2 小时前
LangChain4j入门:集成SpringBoot与核心概念全解析
java·spring boot·ai·大模型·langchain4j
计算机学姐2 小时前
基于SpringBoot的高校实验室预约管理系统
java·spring boot·后端·mysql·spring·信息可视化·tomcat
九转成圣2 小时前
实战记录:用 Java 拼接长图/网格图,我踩了哪些坑?
java·开发语言
lzhdim2 小时前
SQL 入门 9:SQL 高级子查询:ANY、EXISTS 与多位置应用
java·开发语言·数据库·sql·mysql
杰克尼2 小时前
springCloud_day08(Elasticsearch)
java·spring·spring cloud