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

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

相关推荐
珹洺6 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
SHUIPING_YANG14 分钟前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼26 分钟前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
惊涛骇浪、32 分钟前
SpringMVC + Tomcat10
java·tomcat·springmvc
墨染点香1 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
ldj20201 小时前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿1 小时前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
风象南1 小时前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山1 小时前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos
Y4090011 小时前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记