news 2026/7/31 17:50:56

第二阶段 12 · range 范围查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二阶段 12 · range 范围查询

阶段:第二阶段 / 查询能力
ES 查询:range| PostgreSQL 对照:BETWEEN/>=/<=


1. 概念

range用于数值、日期、字符串的范围过滤。参数:

参数含义SQL 对应
gt大于>
gte大于等于>=
lt小于<
lte小于等于<=

range通常放在filter上下文里(不需要相关性打分)。


2. PostgreSQL 对照

-- 数值范围SELECT*FROMsalesdataWHEREnet_amountBETWEEN1000AND5000;-- 日期范围SELECT*FROMsalesdataWHEREinvoice_dt>='2026-01-01'ANDinvoice_dt<'2026-07-01';

3. ES DSL

数值范围

GET salesdata_idx/_search { "query": { "range": { "net_amount": { "gte": 1000, "lte": 5000 } } } }

日期范围(支持日期数学表达式)

GET salesdata_idx/_search { "query": { "range": { "invoice_dt": { "gte": "2026-01-01", "lt": "2026-07-01" } } } }

日期数学示例:"gte": "now-7d/d"表示「最近 7 天」,/d表示按天取整。

放进 filter(推荐)

{ "query": { "bool": { "filter": [ { "range": { "net_amount": { "gte": 1000 } } } ] } } }

4. Spring Boot 实现

@ComponentpublicclassDoc12RangeQuery{@AutowiredprivateElasticsearchClientelasticsearchClient;/** net_amount BETWEEN min AND max */publicList<Map<String,Object>>byAmountRange(StringindexName,doublemin,doublemax)throwsIOException{SearchResponse<Map>resp=elasticsearchClient.search(s->s.index(indexName).query(q->q.range(r->r.field("net_amount").gte(JsonData.of(min)).lte(JsonData.of(max)))),Map.class);returntoSourceList(resp);}/** invoice_dt >= from AND invoice_dt < to */publicList<Map<String,Object>>byDateRange(StringindexName,Stringfrom,Stringto)throwsIOException{SearchResponse<Map>resp=elasticsearchClient.search(s->s.index(indexName).query(q->q.range(r->r.field("invoice_dt").gte(JsonData.of(from)).lt(JsonData.of(to)))),Map.class);returntoSourceList(resp);}privateList<Map<String,Object>>toSourceList(SearchResponse<Map>resp){returnresp.hits().hits().stream().map(Hit::source).filter(Objects::nonNull).collect(Collectors.toList());}}

注意 import:co.elastic.clients.json.JsonDatarange的边界值在 8.x 客户端
JsonData.of(...)包装,可传数值、字符串日期等。


5. 坑与最佳实践

  1. gte/lte别混用成BETWEEN语义错误BETWEEN是闭区间[a,b],对应gte + lte
  2. 日期字段要有正确 mappingtype: dateformat匹配写入格式,否则范围失效。
  3. 半开区间更安全:按天/月过滤时用gte 起 + lt 下一个起点,避免边界重复。
  4. 放 filter:范围过滤几乎都不需要打分,放filter更快、可缓存。
  5. 字符串 range 慎用keyword也能范围比较,但一般只对数值/日期有意义。

下一篇

13-bool-组合查询.md(最重要的一篇,AND/OR/NOT 全靠它)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 17:49:30

Javase基础语法_分支结构等_作业

1.水仙花数分析&#xff1a;如&#xff1b;153&#xff1d;1^3&#xff0b;5^3&#xff0b;3^3&#xff0c;则153是一个“水仙花数“。因此1.求这个数有几位 2.求这个数字的每一位这时我们可以定义一个count&#xff0c;并且/10&#xff0c;/10一次去掉一位&#xff0c;count1f…

作者头像 李华
网站建设 2026/7/31 17:48:44

盘锦高三综合评价报考,家长怎么少走弯路?

这两年我身边不少盘锦高三家长&#xff0c;一聊到综合评价就有点懵&#xff1a; “听说能多一条路&#xff0c;但到底适不适合我家孩子&#xff1f;” “材料要准备什么&#xff0c;时间节点会不会错过&#xff1f;” “是不是只看成绩&#xff0c;还是还要看活动、奖项、面试&…

作者头像 李华
网站建设 2026/7/31 17:44:55

RAG 召回90%却答错?Taotoken实测发现重排阶段3个致命疏忽

企业知识库系统重排优化实战&#xff1a;从31%到79%准确率的跃迁之路 召回≠可用&#xff1a;深入解析指标欺骗性 在构建企业知识库系统时&#xff0c;我们往往陷入一个典型误区&#xff1a;过度追求召回率&#xff08;Recall&#xff09;指标。经过连续72小时的严苛测试&…

作者头像 李华
网站建设 2026/7/31 17:44:03

Git常用命令 个人总结

Git常用命令 个人总结git 介绍一、用户名和邮箱1、查看GIT配置情况2、配置全局用户名和邮箱3、修改默认编辑器二、基础命令1、git 帮助命令2、初始化本地git仓库3、查看git存储状态4、添加文件到暂存区5、将暂存区内容提交为一个版本6、屏蔽文件不参与git管理三、查看命令1、查…

作者头像 李华
网站建设 2026/7/31 17:43:05

git 详解-问题篇

git 详解-问题篇 平常找开源代码时&#xff0c;浏览 github 必不可少可选项&#xff0c;偶尔出现无法访问&#xff0c;本篇文章简单讲解如何恢复。某些时候需要团队协作&#xff0c;明明有代码访问权限&#xff0c;但却无法下载代码。提交代码时失败&#xff0c;提示仓库不存在…

作者头像 李华