elasticsearch 如果按照日期进行筛选

如果你需要按照日期进行筛选,你可以使用 Elasticsearch 的范围查询来实现。以下是一个示例代码,演示如何在 Java 中进行日期范围查询:

复制代码
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ElasticsearchQueryWithDateRange {
   

    public static void main(String[] args) {
   
        // Elasticsearch集群的主机和端口
        String hostname = "your_hostname";
        int port = 9200;

        // 认证信息
        String username = "your_username";
        String password = "your_password";

        // 构建认证
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));

        // 构建RestClient
        RestClientBuilder builder = RestClient.builder(new HttpHost(hostname, port))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));

        // 构建RestHighLevelClient
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 构建日期格式化对象
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

        // 定义起始日期和结束日期
        Date startDate = ...; // 设置起始日期
        Date endDate = ...;   // 设置结束日期

        // 构建搜索请求
        SearchRequest searchRequest = new SearchRequest("your_index_name");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        // 添加日期范围查询条件
        searchSourceBuilder.query(QueryBuilders.rangeQuery("date_field_name")
                .gte(dateFormat.format(startDate))
                .lt(dateFormat.format(endDate)));

        searchRequest.source(searchSourceBuilder);

        try {
   
            // 执行搜索请求
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

            // 处理搜索结果
            for (SearchHit hit : searchResponse.getHits().getHits()) {
   
                // 读取每个搜索结果的数据
                String documentId = hit.getId();
                String documentSource = hit.getSourceAsString();
                System.out.println("Document ID: " + documentId);
                System.out.println("Document Source: " + documentSource);
            }
        } catch (IOException e) {
   
            e.printStackTrace();
        } finally {
   
            // 关闭客户端连接
            try {
   
                client.close();
            } catch (IOException e) {
   
                e.printStackTrace();
            }
        }
    }
}

在这个示例中,你需要将 date_field_name 替换为你的文档中实际存储日期的字段名称,同时设置合适的起始日期 startDate 和结束日期 endDate。确保日期格式化对象的格式与你的日期字段格式匹配。

这个示例将执行一个范围查询,返回指定日期范围内的文档。

相关推荐
Aktx20FNz16 分钟前
iFlow CLI 完整工作流指南
大数据·elasticsearch·搜索引擎
LaughingZhu1 小时前
Anthropic 收购 Oven 后,Claude Code 用运行时写了一篇护城河文章
大数据·人工智能·经验分享·搜索引擎·语音识别
学习3人组1 小时前
TortoiseGit冲突解决实战上机练习
大数据·elasticsearch·搜索引擎
Ln5x9qZC21 小时前
Flink SQL 元数据持久化实战
大数据·sql·flink
OYpBNTQXi2 小时前
Flink Agents 源码解读 --- (6) --- ActionTask
大数据·flink
A__tao2 小时前
Elasticsearch Mapping 一键生成 Go Struct,支持嵌套解析
elasticsearch·es
中金快讯3 小时前
济民健康医疗服务占比提升至46%!业务结构调整初见成效
大数据·人工智能
lizhihai_993 小时前
股市学习心得-尾盘半小时买入法
大数据
大大大大晴天️3 小时前
Hudi 生产问题排障-乱序Upsert入湖数据丢失
大数据·flink·hudi
zs宝来了3 小时前
Elasticsearch 索引原理:倒排索引与 Segment 管理
elasticsearch·索引·倒排索引·源码解析·segment