AI 辅助程序员日常,ES 分页查询 3 分钟搞定!

大家好,我是伍六七。

程序猿们在日常的工作中,经常会碰到一些数据处理的工作,比如日志查询、日志过滤等需求。

以前我们可能会自己写一个功能性代码来跑数据,现在,你只需要把你要解决的问题发给 GPT,它生成的代码,你就可以直接用了。

前段时间,阿七就接到一个小的日常问题,让我将所有符合条件的日志数据都导出来,日志数据存储在 ES 中。

但是阿七已经很久没写过 ES 了,完全忘记了呀。怎么办,第一想法是找有没有其他项目中有类似代码,发现找不到。马上,想到可以把问题抛给 GPT,结果我 3 分钟就搞定了!

我们把需要 GPT 做的事情和限制条件发给 GPT,prompt 如下:

帮我编写一段java代码,用来查询es数据库中,索引:index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并导出到文件 index1_search.log。

要求如下:

1、使用 elasticsearch-rest-high-level-client-7.7.0中的 org.elasticsearch.client.RestHighLevelClient 这个类作为client

以下是一个简单的 Java 代码示例,用于查询 Elasticsearch 中的索引index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并将结果导出到文件 index1_search.log 中。

该代码使用了 elasticsearch-rest-high-level-client-7.7.0 中的 org.elasticsearch.client.RestHighLevelClient 类作为 client。

java 复制代码
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class ElasticsearchQuery {

    public static void main(String[] args) throws IOException {
        // 创建RestHighLevelClient对象
        RestHighLevelClient client = new RestHighLevelClient();

        // 构建查询条件
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("keyword1", "value1"))
                .must(QueryBuilders.termQuery("keyword2", "value2"))
                .must(QueryBuilders.rangeQuery("date1").gte("2021-01-01").lte("2021-12-31"));

        // 构建查询请求
        SearchRequest searchRequest = new SearchRequest("index1");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);
        searchSourceBuilder.size(1000);
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(searchSourceBuilder);

        // 执行查询请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

        // 处理查询结果
        SearchHit[] searchHits = searchResponse.getHits().getHits();
        BufferedWriter writer = new BufferedWriter(new FileWriter("index1_search.log"));
        for (SearchHit hit : searchHits) {
            String source = hit.getSourceAsString();
            writer.write(source);
            writer.newLine();
        }
        writer.close();

        // 关闭RestHighLevelClient对象
        client.close();
    }
}

该代码中,首先创建了一个 RestHighLevelClient 对象,然后使用 BoolQueryBuilder 构建了查询条件,包括 keyword1、keyword2 和 date1 三个字段的查询条件。

接着,使用 SearchRequest 和 SearchSourceBuilder 构建了查询请求,并执行了查询请求。最后,将查询结果导出到文件 index1_search.log 中,并关闭了 RestHighLevelClient 对象。

然后我发现数据量太大了,怎么办呢?可以分页解决,就跟谷歌浏览器的搜索分页一样,但是不会写,怎么办?继续扔问题给 GPT。

我们在原来的提示词中补充新的分页的需求,prompt 如下:

帮我编写一段java代码,用来查询es数据库中,索引:index1,包含字段keyword1、keyword2,日期是 date1 的所有内容,并导出到文件 index1_search.log。

要求如下:

1、使用 elasticsearch-rest-high-level-client-7.7.0中的 org.elasticsearch.client.RestHighLevelClient 这个类作为client

2、日志比较大,使用 scroll 循环查询,每次查询100条

以下是一个 Java 代码示例,用于查询 Elasticsearch 中的索引 index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并将结果导出到文件 index1_search.log中。

该代码使用了 elasticsearch-rest-high-level-client-7.7.0 中的 org.elasticsearch.client.RestHighLevelClient类作为client,并使用 scroll 循环查询,每次查询 100 条。

java 复制代码
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.ClearScrollResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class ElasticsearchQuery {

    public static void main(String[] args) throws IOException {
        // 创建RestHighLevelClient对象
        RestHighLevelClient client = new RestHighLevelClient();

        // 构建查询条件
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.termQuery("keyword1", "value1"))
                .must(QueryBuilders.termQuery("keyword2", "value2"))
                .must(QueryBuilders.rangeQuery("date1").gte("2021-01-01").lte("2021-12-31"));

        // 构建查询请求
        SearchRequest searchRequest = new SearchRequest("index1");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);
        searchSourceBuilder.size(100);
        searchRequest.scroll(new TimeValue(1, TimeUnit.MINUTES));
        searchRequest.source(searchSourceBuilder);

        // 执行查询请求
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        String scrollId = searchResponse.getScrollId();

        // 处理查询结果
        BufferedWriter writer = new BufferedWriter(new FileWriter("index1_search.log"));
        while (true) {
            SearchHit[] searchHits = searchResponse.getHits().getHits();
            for (SearchHit hit : searchHits) {
                String source = hit.getSourceAsString();
                writer.write(source);
                writer.newLine();
            }

            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
            scrollRequest.scroll(new TimeValue(1, TimeUnit.MINUTES));
            searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
            if (searchResponse.getHits().getHits().length == 0) {
                break;
            }
        }
        writer.close();

        // 清除scroll上下文
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        clearScrollRequest.addScrollId(scrollId);
        ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);

        // 关闭RestHighLevelClient对象
        client.close();
    }
}

该代码中,首先创建了一个 RestHighLevelClient 对象,然后使用 BoolQueryBuilder 构建了查询条件,包括 keyword1、keyword2 和 date1 三个字段的查询条件。

接着,使用 SearchRequest 和 SearchSourceBuilder 构建了查询请求,并执行了查询请求。由于日志比较大,使用 scroll 循环查询,每次查询 100 条,并将查询结果导出到文件 index1_search.log 中。

最后,清除 scroll 上下文,并关闭了 RestHighLevelClient 对象。

自从有了 GPT,写代码如此简单,原来可能需要半个小时甚至 1 个小时的工作,3 分钟就搞定了,赶紧去试用吧!


关注我,送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题,靠着这份面试题,我从 30 人的小公司,进了 2000 人+的央企子公司,之后又进了互联网大厂。

一份让我进大厂&央企的面试题

相关推荐
richard_first3 分钟前
第21章 训练一个简单的 GPT
人工智能·gpt·深度学习
Highcharts.js11 分钟前
Highcharts 集成到 React 或 Vue 项目中时,如何高效地使用 TypeScript技巧?
vue.js·人工智能·react.js·typescript·前端框架·highcharts
小lo想吃棒棒糖12 分钟前
把 启元机器人Q1 的训练搬到昇腾 910B:从 MuJoCo 到 PPO 的一次完整迁移
人工智能·python·机器人·昇腾·具身智能
收放扳机12 分钟前
PCB自动化整机“末端执行器”与“机械手负载”的匹配选型
人工智能·科技·自动化·制造·pcb工艺
IT_陈寒14 分钟前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
weixin_3077791320 分钟前
RAG 级联失效分析——面试中的错误归因艺术
人工智能·python·面试·职场和发展
骑着蜗牛撵大象32721 分钟前
闲鱼捡漏自动化:关键词加价格上限先粗筛,AI 大模型再做第一轮判定
大数据·人工智能·ai·自动化·二手交易·闲鱼·关键词监控
AI创界者22 分钟前
Python 进阶实战(十八):API 网关安全与异步鉴权中间件 —— 基于 AsyncIO 的 JWT 零拷贝验权与动态黑名单过滤
人工智能·python·aigc
涛声依旧-底层原理研究所26 分钟前
可控执行系统:企业 Agent 从演示到生产的架构重构
人工智能·架构
Data-Miner28 分钟前
不本地部署,大模型怎么安全用?
大数据·人工智能·安全