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

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

相关推荐
代码的余温30 分钟前
Maven引入第三方JAR包实战指南
java·maven·jar
超龄超能程序猿2 小时前
dnSpy 使用教程
windows·microsoft
pianmian14 小时前
类(JavaBean类)和对象
java
我叫小白菜4 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison5 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍5 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122465 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~6 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇6 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097626 小时前
JavaEE-Linux环境部署
java·linux·java-ee