当前位置: 首页 > news >正文

es的range失效

es的range失效的解决方法

问题描述

当我们es使用keyword类型存储数字时,当我们使用range时我们发现range失效的问题,例如以下的用例:

我们创建一个test1的索引test1:

image-20250423190453040

使用_bulk进行批量导入数据:

image-20250423190504390

进行查询我们发现我们要使用range进行0-5000的范围查询,但发现10000出现了

image-20250423190558050

这是为什么呢?

原因解释:因为es的keyword的字符串比较是按字典序进行的(“100” < “20” 因为 ‘1’ < ‘2’),同理5000>10000是因为5>1

如何解决呢?

正确解决方案

方案1:重新映射字段为数值类型(推荐)

PUT /products/_mapping
{"properties": {"price": {"type": "float"  // 或 "integer"}}
}

然后使用数值类型的 range 查询。

方案2:使用脚本转换字符串为数值(性能较差)

GET /products/_search
{"query": {"script": {"script": {"source": "Double.parseDouble(doc['price'].value) >= params.min && Double.parseDouble(doc['price'].value) <= params.max","params": {"min": 100,"max": 500}}}}
}

方案3:使用标准化格式存储文本价格(次优方案)

如果必须保持文本类型,确保所有价格:

  • 统一小数位数(如都保留2位:100.00)
    化格式存储文本价格(次优方案)

如果必须保持文本类型,确保所有价格:

  • 统一小数位数(如都保留2位:100.00)
  • 统一数字
http://www.xdnf.cn/news/107569.html

相关文章:

  • 如何在Spring Boot中实现热加载以避免重启服务器
  • 数据治理体系的“三驾马车”:质量、安全与价值挖掘
  • 武汉昊衡科技OLI光纤微裂纹检测仪:高密度光器件的精准守护者
  • JavaWeb学习打卡-Day2-Mysql索引、事务
  • 浅试MCP:spring ai使用mcp调用deepseek的API接口
  • IDEA中Quarkus框架(3.13版本)容器编排、压测与调优、注意事项等
  • element-ui transfer 组件源码分享
  • 永磁同步电机控制算法--零d轴电流IF控制
  • 幂等性设计保障系统可靠性和数据一致性
  • 顺序表专题
  • 结合地理数据处理
  • 数据流量采集系统的实现
  • 为什么Spring中@Bean注解默认创建单例Bean
  • TORL:解锁大模型推理新境界,强化学习与工具融合的创新变革
  • 将 MySQL 8 主从复制延迟优化到极致
  • cgdb的基础使用教程
  • 制造业数字化转型标杆解析:从冀凯机电到君乐宝的启示
  • Java类加载器(ClassLoader)及其相关类 简介
  • 【C++】AVL树
  • 《从卷积核到数字解码:CNN 手写数字识别实战解析》
  • 蚊子的搜索距离可达60公里:对一些特殊气味有所偏爱
  • 短说社区V5.2.1正式版发布|修复已知问题
  • 品牌名凭空消失?3步破解亚马逊前台标题隐藏危机
  • 在Linux驱动开发中使用DeepSeek的方法
  • 智能指针(shared_ptr)之二
  • 18487.1-2015-解读笔记五-交流充电之停止充电
  • 详解 synchronized 关键字【通俗易懂】
  • 前端常见问题
  • 西门子S7-200SMART 控制Profinet闭环步进MD-4250-PN (1)电机及专栏介绍
  • 基于百度地图 MCP Server规划规划一次青岛到北京旅行的详细行程实践