ElasticSearch 实战:ES中如何进行日期(数值)范围查询
在Elasticsearch中进行日期或数值范围查询,你可以使用range查询。以下是如何使用range查询进行日期和数值范围查询的示例:
日期范围查询:
GET /my_index/_search
{
"query": {
"range": {
"post_date": { // 假设post_date是日期类型字段
"gte": "2022-01-01", // 大于等于2022年1月1日
"lte": "2022-12-31", // 小于等于2022年12月31日
"format": "yyyy-MM-dd" // 如果日期不是标准的Unix毫秒时间戳,需指定日期格式
}
}
}
}
数值范围查询:
GET /my_index/_search
{
"query": {
"range": {
"price": { // 假设price是数值类型字段
"gte": 100, // 大于等于100
"lte": 500, // 小于等于500
"boost": 2 // 可选,提升查询相关性得分
}
}
}
}
在上述例子中,gte 是 “greater than or equal to” 的缩写,lte 是 “less than or equal to” 的缩写。你还可以使用 gt(大于)和 lt(小于)代替 gte 和 lte 来进行开放区间查询。
如果索引中的日期是以字符串形式存储并且有特定的日期格式,你需要在查询中指定相应的格式。如果没有指定,Elasticsearch会尝试使用默认的日期格式解析输入的日期字符串。
对于数值类型的字段,Elasticsearch会直接比较数值大小,无需指定格式。同时,boost 参数可以用来提高该查询在综合评分中的比重,意味着在同等条件下,落在指定价格范围内的商品在搜索结果中的排名将更高。