You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中elastic_client的Query.range时间范围查询用法求助

使用elastic_client实现Elasticsearch时间范围查询

一、elastic_client的Query.range实现

根据你提供的curl请求,对应的Query.range实现如下,完全映射原请求的参数逻辑:

import 'package:elastic_client/elastic_client.dart';
import 'package:elastic_client/transport.dart';

Future<void> _callElastic() async {
  // 初始化Elasticsearch HTTP传输客户端
  final transport = HttpTransport(Uri.parse('http://localhost:9200'));
  final client = ElasticClient(transport);

  try {
    // 构建时间范围查询
    final query = Query.range(
      '@timestamp',
      gte: '2022-08-16T16:18:00+09:00',
      lte: 'now',
      format: 'date_time_no_millis',
    );

    // 执行搜索请求
    final response = await client.search(
      index: 'index',
      query: query,
    );

    // 处理返回结果
    print('匹配总数: ${response.hits.total}');
    for (var hit in response.hits.hits) {
      print(hit.source);
    }
  } catch (e) {
    print('查询失败: $e');
  } finally {
    // 关闭客户端释放资源
    client.close();
  }
}

参数对应说明:

  • '@timestamp':指定要筛选的时间字段,与curl请求中的字段名完全一致
  • gte:对应curl的"gte"参数,设置时间范围的起始值
  • lte:对应curl的"lte"参数,传入'now'让Elasticsearch自动解析为当前时间
  • format:对应curl的"format"参数,指定时间字符串的解析格式

二、替代方案:直接用http包发送请求

如果觉得elastic_client的API不够直观,也可以直接用Flutter自带的http包手动构造JSON请求,完全复用你熟悉的curl请求结构:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> _callElasticWithHttp() async {
  final url = Uri.parse('http://localhost:9200/index/_search');
  final requestBody = jsonEncode({
    "query": {
      "range": {
        "@timestamp": {
          "gte": "2022-08-16T16:18:00+09:00",
          "lte": "now",
          "format": "date_time_no_millis"
        }
      }
    }
  });

  try {
    final response = await http.get(
      url,
      headers: {'Content-Type': 'application/json'},
      body: requestBody,
    );

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      print('匹配总数: ${data['hits']['total']}');
      for (var hit in data['hits']['hits']) {
        print(hit['_source']);
      }
    } else {
      print('请求失败: 状态码 ${response.statusCode}');
    }
  } catch (e) {
    print('请求异常: $e');
  }
}

这种方式无需依赖第三方Elasticsearch客户端包,直接复用已有curl请求的JSON结构,学习成本更低。

内容的提问来源于stack exchange,提问作者Syukun MiMis_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:15:34