学会在搜索查询中使用布尔表达式定义范围参数

142 阅读2分钟

在Elasticsearch中,我们可以使用范围查询来获得符合特定范围的文档结果。

在本指南中,你将学会在搜索查询中使用布尔表达式定义范围参数,如大于、小于等。

Elasticsearch范围查询:基本用法

为了在搜索查询中指定一个特定的范围,我们可以使用范围参数,后面跟上要检查的字段和条件。

以下面的查询为例,它返回字段AvigTicketPrice大于600和小于800的文件

GET /kibana_sample_data_flights/_search
{
"query": {
"range": {
"AvgTicketPrice": {
"gte": 600,
"lte": 800
  }
    }
  }
}

下面是返回结果的例子。

了解查询的内容

在上面的例子中,我们在查询中设置了范围。range关键字需要field参数,它定义了要搜索的字段。

然后我们继续定义字段的参数。这些是布尔条件,如。

  1. gt;大于
  2. gte:大于或等于
  3. lt :小于
  4. 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中的范围查询来过滤符合特定范围的结果。