Java客户端调用elasticsearch进行深度分页查询 (search_after)

Java客户端调用elasticsearch进行深度分页查询 (search_after)

    • [一. 代码](#一. 代码)
    • [二. 测试结果](#二. 测试结果)

前言

这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。

作者:神的孩子都在歌唱

具体的Search_after解释,可以看我这篇文章 elasticsearch 深度分页查询 Search_after(图文教程)

一. 代码

java 复制代码
public class Test {

    public static void main(String[] args) throws IOException {

        // 创建客户端
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("elastic", "chenyunzhi"));

        // 跳过ssl验证
        SSLFactory sslFactory = SSLFactory.builder()
                .withUnsafeTrustMaterial()
                .withUnsafeHostnameVerifier()
                .build();

        RestClientBuilder builder = RestClient.builder(
                        new HttpHost("192.168.1.47", 9200,"https"))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(
                            HttpAsyncClientBuilder httpClientBuilder) {
                        return httpClientBuilder
                                .setSSLContext(sslFactory.getSslContext())
                                .setSSLHostnameVerifier(sslFactory.getHostnameVerifier())
                                .setDefaultCredentialsProvider(credentialsProvider);
                    }
                });

        // Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(builder.build(), new JacksonJsonpMapper());
        // 客户端连接
        ElasticsearchClient client = new ElasticsearchClient(transport);

        // 创建pit
        OpenPointInTimeRequest.Builder build = new OpenPointInTimeRequest.Builder();
        OpenPointInTimeRequest.Builder builder1 = build.index("test-000005").keepAlive(new Time.Builder().time("1m").build());
        OpenPointInTimeResponse openPointInTimeResponse = client.openPointInTime(builder1.build());
        String id = openPointInTimeResponse.id();

        // 构造查询条件
        SearchRequest.Builder sort = new SearchRequest.Builder().size(5)
                .pit(p->p.id(id).keepAlive(k->k.time("1m")))
                .sort(s -> s.field(f -> f.field("name.keyword").order(SortOrder.Desc)));

        // 获取第一次查询的结果
        List<Hit<HashMap>> hits = client.search(sort.build(), HashMap.class).hits().hits();

        // 检查 hits 列表是否为空
        if (!hits.isEmpty()) {
            //  获取最后一个值的sort
            List<String> sort1 = hits.get(hits.size() - 1).sort();

            // 再次构造查询条件 加上searchAfter
            sort = new SearchRequest.Builder().size(5)
                    .pit(p->p.id(id).keepAlive(k->k.time("1m")))
                    .searchAfter(sort1)
                    .sort(s -> s.field(f -> f.field("name.keyword").order(SortOrder.Desc)));

            List<Hit<HashMap>> hits1 = client.search(sort.build(), HashMap.class).hits().hits();

            System.out.println("-------------------------第一次查询结果-------------------------");
            System.out.println(hits);

            System.out.println("-------------------------最后一个值的sort-------------------------");
            System.out.println(sort1);

            System.out.println("-------------------------第二次查询结果-------------------------");
            System.out.println(hits1);

        }

        // 关闭
        client.closePointInTime(c->c.id(id));
        transport.close();
    }
}

二. 测试结果

参考:https://blog.csdn.net/qq_44056652/article/details/126341810

作者:神的孩子都在歌唱

本人博客:https://blog.csdn.net/weixin_46654114

转载说明:务必注明来源,附带本人博客连接。

相关推荐
凤山老林16 分钟前
Spring Boot 3.x AOT 编译实战:从原理、踩坑到生产落地
java·spring boot·后端
博傅28 分钟前
Spring 核心原理
java·后端·spring
yurenpai(27届找实习中)31 分钟前
从零读懂 AI 智能客服(一):模块职责与 SSE 聊天链路(后端架构)
java·人工智能·架构·langchain4j
陈皮波比茶1 小时前
Swagger
java
玹外之音1 小时前
Spring AI + Elasticsearch 向量存储实战:从零构建智能文档检索系统
人工智能·spring·elasticsearch
小闫BI设源码1 小时前
Elasticsearch面试必看:如何让客户端精准选择节点高效执行请求?
java·elasticsearch·面试宝典·深入解析
醉颜凉2 小时前
Elasticsearch 相关性评分核心解密:tie_breaker 参数作用原理与实战调优全解析
大数据·elasticsearch·jenkins
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记
进阶的小名2 小时前
Spring AI 2.0 探索:多 OpenAI-Compatible 模型接入,以及下一代 Session 记忆管理
java·人工智能·后端·gpt·spring·ai·chatgpt
yaoxin5211232 小时前
503. Java 反射 - 编写 ServiceFactory 类
java·开发语言·python