Elasticsearch查询Range Query语法示例

目录
  • Range Query
    • 查询语法示例
    • 查询数字范围
    • 查询日期范围
    • 查询字符串范围
    • 注意
  • JavaAPI查询示例
    • 总结

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的资料请关注我们其它相关文章!

(0)

相关推荐

  • Elasticsearch查询及聚合类DSL语句宝典示例详解

    目录 前言 一.match 二.match_phrase 三.mult_match 四.term 五.terms 六.range 七.wildcard 八.regexp 九.组合多查询(bool查询) 十.聚合 前言 随着使用es场景的增多,工作当中避免不了去使用es进行数据的存储,在数据存储到es当中以后就需要使用DSL语句进行数据的查询.聚合等操作,DSL对SE的意义就像SQL对MySQL一样,学会如何编写查询语句决定了后期是否能完全驾驭ES,所以至关重要,本专题主要是分享常用的DSL语句,

  • python中elasticsearch_dsl模块的使用方法

    目录 前言 连接elasticsearch elasticsearch_dsl.Search query方法 filter方法 index方法 elasticsearch_dsl.query elasticsearch_dsl.Q 嵌套类型 查询 排序 分页 聚合 高亮显示 source限制返回字段 删除 案例分析 前言 elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法. 安装: install elastic

  • Elasticsearch查询之Term Query示例解析

    目录 Term Query 基本语法 Java代码写法 Terms-匹配多个值 基本语法 Java写法 Term查询可配置的其他参数 总结 Term Query Term Query是一种最基本的查询方式,它用于在Elasticsearch中查询一个字段中包含指定关键词的文档,与MySQL中的等值查询类似.使用Term Query时,可以对字段进行完全匹配,且区分大小写. 基本语法 GET /{index}/_search { "query": { "term":

  • Elasticsearch聚合查询及排序操作示例

    目录 1 es排序 2 match和match的区别 3 分页查询 4 es 组合查询 5 结果过滤展示字端 6 结果高亮展示 7 聚合查询avg.max.min.sum.分组 8 mapping和_template模版 9 ik分词 10 term和match的区别 1 es排序 # 1 排序 GET jeff/doc/_search { "query": { "match": { "from": "gu" } }, &qu

  • MySQL系列多表连接查询92及99语法示例详解教程

    目录 1.笛卡尔积现象 2.连接查询知识点概括 1)什么是连接查询? 2)连接查询的分类 3.内连接讲解 1)等值连接:最大特点是,连接条件为等量关系. 2)sql92语法和sql99语法的区别. 3)非等值连接:最大特点是,连接条件为非等量关系. 4)自连接:最大特点是,一张表看作两张表. 4.外连接讲解 1)什么是外连接,和内连接有什么区别? 2)外连接的分类 前面两天带着大家换了一个口味,带着大家学习了pyecharts的原理和部分图形制作.今天我们继续回归带你学MySQL系列,带着大家继

  • YII2框架中查询生成器Query()的使用方法示例

    本文实例讲述了YII2框架中查询生成器Query()的使用方法.分享给大家供大家参考,具体如下: YII2中的yii\db\Query给我们提供了非常丰富的方法,方便我们构建复杂的SQL语句. Query()与createCommand最大区别在于,后者直接使用我们写好的SQL语句,前者通过参数和数据库类型生成不同SQL,迁移性更好. <?php namespace app\controllers; use YII; use yii\db\Query; use yii\web\Controlle

  • 10个Elasticsearch查询的实用技巧分享

    目录 前言 示例 1. 匹配多个词语 2. 匹配某个字段中的任意一个词 3. 匹配某个字段中的词语前缀 4. 匹配某个字段中的词语通配符 5. 匹配某个字段中的词语模糊匹配 6. 匹配某个字段中的词语范围 7. 匹配某个字段中的词语存在与否 8. 按照某个字段排序 9. 返回某些字段的部分数据 10. 进行分页操作 前言 Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案.然而,我们要想成为一个优秀的程序员,就必须掌握各种查询技巧.本文将向大家介绍10个实用的E

  • Yii查询生成器(Query Builder)用法实例教程

    本文为yii官网英文文档的翻译版本,主要介绍了Yii查询生成器(Query Builder)的用法.分享给大家供大家参考之用.具体如下: 首先,Yii的查询生成器提供了用面向对象的方式写SQL语句.它允许开发人员使用类的方法和属性来指定一个SQL语句的各个部分.然后,组装成一个有效的SQL语句,可以通过调用DAO数据访问对象的描述方法为进一步执行.以下显示了一个典型的使用查询生成器建立一个select语句: $user = Yii::app()->db->createCommand() -&g

  • MySQL数据库子查询 sub query

    目录 1.基本概念 1.1.子查询 1.2.主查询 1.3.子查询和主查询的关系 1.4.子查询的分类 2.标量子查询 2.1.基本语法 2.2.示例 3.列子查询 3.1.基本语法 3.2.示例 4.行子查询 4.1.基本语法 4.2.示例 5.表子查询 5.1.基本语法 5.2.示例 6.exists子查询 6.1.基本语法 6.2.示例 7.子查询中的特定关键字 7.1.in 7.2.any 7.3.some 7.4.all 7.5.值为null 1.基本概念 1.1.子查询 嵌套查询下层

  • Elasticsearch查询 - Match 查询

    目录 Match Query match查询示例 JavaAPI查询示例 match_phrase查询示例 match查询的常用参数 Match查询与Term查询的区别 总结 Match Query Match查询是一种基于全文本的查询方法,可以在一个或多个字段中搜索包含指定文本的文档.它会将查询字符串进行分词处理,然后对每个词进行匹配,从而找到所有匹配的文档. Match查询有两种类型:match_phrase和match.match_phrase用于匹配完整的短语,而match只需匹配单个词

  • go语言基础语法示例

    周末天气不好,只能宅在家里,于是就顺便看了一下Go语言,觉得比较有意思,所以写篇文章介绍一下.我想写一篇你可以在乘坐地铁或公交车上下班时就可以初步了解一门语言的文章.所以,下面的文章主要是以代码和注释为主.只需要你对Java,Python,C等编程语言有一点基础,我相信你会在30分钟左右读完并对Go语言有一些初步了解的. 本文的唯一目的,就是希望大家阅读之后,能够了解go语言长什么样子... Hello World package main //声明本文件的package名 import "fm

  • Laravel 模型使用软删除-左连接查询-表起别名示例

    事情是这样的,有天写了一个左连接查询,由于表名太长,所以分别给起个别名,代码如下: public function detail() { $result = TakeOrderModel::query() ->from('take_order as order') ->leftJoin('take_order_detail as detail', 'order.id', '=', 'detail.take_order_id') ->get(); dd($result); } 执行后,报错

随机推荐