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

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

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies2 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi2 天前
mysql 查询所有表名并授权
java