当前位置: 首页> 健康> 科研 > 软件开发岗位介绍_买了500元黑科技引流靠谱吗_知名的搜索引擎优化_广东seo网站推广

软件开发岗位介绍_买了500元黑科技引流靠谱吗_知名的搜索引擎优化_广东seo网站推广

时间:2025/7/15 18:42:14来源:https://blog.csdn.net/csynsgh/article/details/147461424 浏览次数:0次
软件开发岗位介绍_买了500元黑科技引流靠谱吗_知名的搜索引擎优化_广东seo网站推广

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)
  • 统一数字
关键字:软件开发岗位介绍_买了500元黑科技引流靠谱吗_知名的搜索引擎优化_广东seo网站推广

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: