Elasticsearch查询Range Query语法示例

 更新时间:2023年04月23日 14:53:13   作者:往之不谏  
这篇文章主要为大家介绍了Elasticsearch查询Range Query语法示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Range Query

Range查询可以查询一个范围内的文档。它可以用来查询数值型字段、日期型字段、字符串型字段等等。

我们可以使用range查询来查询符合一定范围内的数据,如查询某个价格区间、某个时间段内的数据等等。

查询语法示例

GET /{index}/_search
{
  "query": {
    "range": {
      "{field}": {
        "gte": "{lowerBound}",
        "lte": "{upperBound}",
        "gt": "{lowerBound}",
        "lt": "{upperBound}",
        "boost": {boostValue},
        "format": "{dateFormat}",
        "time_zone": "{timezone}"
      }
    }
  }
}

其中,{field}表示要查询的字段,{lowerBound}{upperBound}表示要查询的范围,gte表示大于等于,lte表示小于等于,gt表示大于,lt表示小于。

boost是用来提高查询的重要性,可以设置一个浮点数。

format是用来设置日期格式,如果要查询日期类型的字段,可以设置这个参数。

time_zone是用来设置时区。

查询数字范围

GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 200
      }
    }
  }
}

查询日期范围

GET /logs/_search
{
  "query": {
    "range": {
      "timestamp": {
        "gte": "2022-01-01",
        "lte": "2022-01-31",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

查询字符串范围

针对字符串类型的字段,使用range查询需要注意以下几点:

  • 字符串类型的字段,必须使用keyword类型,才能使用range查询。
  • 在查询字符串的区间时,需要使用字符串类型的区间边界值。

下面是一个使用range查询查询字符串区间的示例:

查询age字段值在"20""30"之间(包括边界值)的文档:

GET /user_info/_search
{
  "query": {
    "range": {
      "age": {
        "gte": "20",
        "lte": "30"
      }
    }
  }
}

注意

即使字段类型为字符串,如果该字段的值可以按照一定的顺序进行比较,那么就可以进行范围查询。比如日期、数字、版本号等等。但是对于不可比较的字符串值,如名称、描述等等,就无法进行范围查询了。

JavaAPI查询示例

SearchRequest searchRequest = new SearchRequest("user_info");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age")
        .gte("20")
        .lte("30");
searchSourceBuilder.query(rangeQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

总结

  • Range查询可以用于数值型、日期型和字符串型的字段。
  • 对于字符串型的字段,其值需要具备可排序的特性,以便进行范围查询。
  • 如果字符串的格式无法排序,需要将其转换为可以排序的格式,如时间戳。
  • 范围查询可以指定包含边界或者不包含边界,以及包含哪些边界。
  • 范围查询可以使用GTE、GT、LTE和LT参数来指定范围的边界。
  • 范围查询可以使用日期时间格式或者UNIX时间戳来查询日期型字段。

以上就是Elasticsearch查询Range Query语法示例的详细内容,更多关于Elasticsearch查询Range Query的资料请关注脚本之家其它相关文章!

相关文章

  • 阿里四面之Spring Exception的原理解析

    阿里四面之Spring Exception的原理解析

    本文给大家介绍阿里四面之Spring Exception的原理解析,本文通过错误场景分析给大家详细介绍Spring异常处理流程,感兴趣的朋友一起看看吧
    2021-10-10
  • SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    本文主要介绍了SpringBoot利用限速器RateLimiter实现单机限流的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java API文档的使用方法详解

    Java API文档的使用方法详解

    在开发过程中如果遇到疑难问题,除了可以在网络中寻找答案,也可以在Java API帮助文档(简称"JDK文档"”)中查找答案,下面这篇文章主要给大家介绍了关于Java API文档使用的相关资料,需要的朋友可以参考下
    2023-02-02
  • Spring MVC数据绑定方式

    Spring MVC数据绑定方式

    这篇文章主要介绍了Spring MVC数据绑定方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java如何利用Mybatis进行数据权限控制详解

    Java如何利用Mybatis进行数据权限控制详解

    这篇文章主要介绍了Java如何利用Mybatis进行数据权限控制详解,数据权限控制最终的效果是会要求在同一个数据请求方法中,根据不同的权限返回不同的数据集,而且无需并且不能由研发编码控制。,需要的朋友可以参考下
    2019-06-06
  • SpringBoot实现多个子域共享cookie的示例

    SpringBoot实现多个子域共享cookie的示例

    本文主要介绍了SpringBoot实现多个子域共享cookie的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 这一次搞懂Spring事务是如何传播的

    这一次搞懂Spring事务是如何传播的

    这篇文章主要介绍了这一次搞懂Spring事务是如何传播的,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java设计模式之备忘录模式实现对象状态的保存和恢复

    Java设计模式之备忘录模式实现对象状态的保存和恢复

    本文介绍Java设计模式之备忘录模式,该模式可以实现对象状态的保存和恢复。通过详细讲解备忘录模式的原理、实现方法和应用场景,帮助读者深入理解该设计模式,并提供示例代码和技巧,便于读者实际应用
    2023-04-04
  • springboot项目部署在linux上运行的两种方式小结

    springboot项目部署在linux上运行的两种方式小结

    这篇文章主要介绍了springboot项目部署在linux上运行的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Jackson序列化和反序列化忽略字段操作

    Jackson序列化和反序列化忽略字段操作

    这篇文章主要介绍了Jackson序列化和反序列化忽略字段操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论