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·后端
bingbingyihao2 小时前
多数据源 Demo
java·springboot
在努力的前端小白7 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
搏博7 小时前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词
一叶飘零_sweeeet9 小时前
从繁琐到优雅:Java Lambda 表达式全解析与实战指南
java·lambda·java8
艾伦~耶格尔10 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
一只叫煤球的猫10 小时前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
最初的↘那颗心10 小时前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
颜如玉11 小时前
ElasticSearch关键参数备忘
后端·elasticsearch·搜索引擎
JH307311 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar