es 日期范围查询(java)

本文介绍如何在Elasticsearch中为日期类型的字段设置映射,并演示了数据插入及查询的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

es建立表的时候要将类型设置为date,也就是设置mapping

PUT jtthink
{
  "mappings": {
    "ipaddr": {
      "properties": {
        "birth": {
          "type": "date" 
        }
      }
    }
  }
}

然后插入数据,注意插入数据的格式

PUT /jtthink/ipaddr/11
{
	"name":"zhangfei",
	"age":33,
	"birth":"2017-09-08T10:10:10"
}


其他相关操作

查看类型
GET jtthink/ipaddr/_mapping
查看数据			
GET /jtthink/ipaddr/11
删除数据
DELETE /jtthink/ipaddr/13

Java的操作

QueryBuilder qb = rangeQuery("birth")
                .from("2017-01-01T10:10:01").to("2017-12-31T10:10:01");

        SearchResponse sr = client.prepareSearch("jtthink")
                .setTypes("ipaddr").setQuery(qb).get();
        SearchHit[] result = sr.getHits().getHits();
        for(SearchHit  searchHit: result){
            System.out.println(searchHit.getSourceAsString());
        }




### 如何在 Java 中使用 Elasticsearch 进行范围查询Java 中通过 `QueryBuilder` 可以轻松构建 Elasticsearch 的范围查询 (Range Query),这是 ES 提供的一种用于筛选数值字段或日期字段的查询方式。以下是详细的说明以及代码示例。 #### 范围查询简介 范围查询允许指定一个区间来匹配文档中的特定字段值。可以设置下限 (`gte`, `gt`) 和上限 (`lte`, `lt`) 来限定这个区间的边界[^4]。 #### 使用 Range Query 的方法 可以通过 `QueryBuilders.rangeQuery()` 方法创建范围查询对象,并将其嵌套到 `SearchSourceBuilder` 中完成最终请求的组装。 #### 示例代码 以下是一个完整的 Java 实现,展示如何执行范围查询: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.RangeQueryBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticSearchExample { public static void main(String[] args) { // 创建 SearchRequest 对象并指定索引名称 SearchRequest searchRequest = new SearchRequest("your_index_name"); // 定义范围查询条件 RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age") // 字段名 .from(18) // 下界(包含) .to(30) // 上界(不包含) .includeLower(true) // 是否包含下界,默认 true .includeUpper(false); // 是否包含上界,默认 false // 创建 SearchSourceBuilder 并设置查询条件 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(rangeQueryBuilder); // 将 SourceBuilder 设置到 Request 中 searchRequest.source(searchSourceBuilder); // 打印生成的 DSL 查询语句以便调试 System.out.println(searchSourceBuilder.toString()); } } ``` 上述代码实现了针对 `age` 字段的一个简单范围查询,查找年龄介于 18 到 30 岁之间的记录。 #### 关键点解析 - **字段名**: 需要明确指定期望过滤的字段,例如这里的 `"age"`。 - **上下界限**: `.from()` 表示起始值,`.to()` 表示结束值;默认情况下,`from` 是包含的而 `to` 不包含。 - **包含与否控制**: `.includeLower(true)` 明确表示是否应包含下界,同理适用于上界的 `.includeUpper(false)`。 #### 结合外部工具优化 如果希望进一步简化复杂查询逻辑或者减少硬编码部分,则可考虑引入像 `elasticsearch-query-builder` 或者其他类似的库[^1]^,^[^3]。这些工具能够帮助开发者更灵活地处理动态参数化需求,从而提升开发效率和维护便利性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值