在Elasticsearch中,我们可以使用范围查询来获得符合特定范围的文档结果。
在本指南中,你将学会在搜索查询中使用布尔表达式定义范围参数,如大于、小于等。
Elasticsearch范围查询:基本用法
为了在搜索查询中指定一个特定的范围,我们可以使用范围参数,后面跟上要检查的字段和条件。
以下面的查询为例,它返回字段AvigTicketPrice大于600和小于800的文件
GET /kibana_sample_data_flights/_search
{
"query": {
"range": {
"AvgTicketPrice": {
"gte": 600,
"lte": 800
}
}
}
}
下面是返回结果的例子。
了解查询的内容
在上面的例子中,我们在查询中设置了范围。range关键字需要field参数,它定义了要搜索的字段。
然后我们继续定义字段的参数。这些是布尔条件,如。
- gt;大于
- gte:大于或等于
- lt :小于
- lte:小于或等于
查询一个时间范围
如果你想搜索的字段是日期类型的,你可以使用上述条件,然后使用下面资源中定义的日期数学。
考虑一下下面的值,它使用time_zone参数将时间转换为UTC值并搜索一个范围。
GET /kibana_sample_data_flights/_search
{
"query": {
"range": {
"timestamp": {
"time_zone": "+03:00",
"gte": "2021-10-14T05:22:14",
"lte": "now"
}
}
}
}
上述查询应该返回时间戳大于2021-10-14的05:22:14的文档。
以下是结果示例:
**注意:**time_zone不影响now参数。
大于
你不必把大于和小于这样的条件结合起来,你可以使用单独的范围,如下面的例子所示。
GET /kibana_sample_data_flights/_search
{
"query": {
"range": {
"DistanceMiles": {
"gte": 10000
}
}
}
}
上面的例子返回DistanceMiles大于10000的文件。
响应如下:
Boolean
要检查字段类型为布尔值的范围,可以使用lte或gte。例如,为了获得取消航班的文件,我们可以运行一个请求,如:
GET /kibana_sample_data_flights/_search
{
"query": {
"range": {
"Cancelled": {
"gte": true
}
}
}
}
在上面的例子中,我们把要检查的范围作为一个布尔值true来传递。
其结果如图所示。
关闭
在本指南中,你学到了如何使用Elasticsearch中的范围查询来过滤符合特定范围的结果。