首页 > 编程笔记 > 通用技能 阅读:2

Elasticsearch date_range类型的用法(附带实例)

范围数据类型表示字段的上限和下限。例如,如果想为疫苗试验选择一组志愿者,可以根据年龄 25~50 岁或 51~70 岁、收入水平、城市居民等类别对志愿者进行分组。

Elasticsearch 提供了范围数据类型来支持对范围数据的搜索查询。范围由运算符定义,如用于上限的 lte(小于或等于)和 lt(小于),以及用于下限的 gte(大于或等于)和 gt(大于)。

Elasticsearch 提供了多种范围数据类型,包括 date_range、integer_range、float_range、ip_range 等。本节我们来看一下 date_range 类型的实际应用。

date_range 数据类型可以帮助为字段索引一个日期范围。然后我们可以使用 range 查询来根据日期的上限和下限来匹配条件。

使用 date_range 类型的实例代码如下:
PUT trainings
{
  "mappings": {
    "properties": {
      "name":{   ←---  培训课程名称
        "type": "text"
      },
      "training_dates":{   ←---  training_dates字段被声明为date_range类型
        "type": "date_range"
      }
    }
  }
}
Venkat Subramaniam 是一位屡获殊荣的作者,他开设了从编程到设计再到测试等诸多领域的培训课程。我们使用他的一些培训课程和日期作为示例,创建一个 trainings 索引,其中包含两个字段,分别是培训课程名称(text 类型)和培训日期(date_range 类型)。

现在,索引已经就绪,让我们用 Venkat 的培训课程和日期索引一些文档:
PUT trainings/_doc/1
{
  "name":"Functional Programming in Java",
  "training_dates":{
    "gte":"2021-08-07",
    "lte":"2021-08-10"
  }
}
 
PUT trainings/_doc/2
{
  "name":"Programming Kotlin",
  "training_dates":{
    "gte":"2021-08-09",
    "lte":"2021-08-12"
  }
}
 
PUT trainings/_doc/3
{
  "name":"Reactive Programming",
  "training_dates":{
    "gte":"2021-08-17",
    "lte":"2021-08-20"
  }
}
date_range 类型的字段需要两个值,分别是上限和下限。它们通常由 gte(大于或等于)、lt(小于)等缩写来表示。

数据准备好之后,我们发出一个搜索请求,查找 Venkat 在两个日期之间的课程,实例代码如下:
GET trainings/_search
{
  "query": {
    "range": {   ←---  使用range查询搜索
      "training_dates": {   ←---  搜索在这两个日期之间的课程
        "gt": "2021-08-10",
        "lt": "2021-08-12"
      }
    }
  }
}
根据查询响应(为简洁起见,省略了结果),我们了解到 Venkat 将在这两个日期之间开设一场“Programming Kotlin”培训(第二个文档与日期匹配)。

date_range 让搜索日期范围变得很容易。除了 date_range,我们还可以创建其他范围类型,包括 ip_range、float_range、double_range、integer_range 等。

相关文章