Elasticsearch Range 您所在的位置:网站首页 range统计类型 Elasticsearch Range

Elasticsearch Range

2024-01-28 12:36| 来源: 网络整理| 查看: 265

1. Range Query

将文档与具有一定范围内字词的字段进行匹配。 Lucene查询的类型取决于字段类型,对于字符串字段,TermRangeQuery,对于数字/日期字段,查询是NumericRangeQuery

基础查询Query下

"query": { "range": { "FIELD": { "gte": 10, "lte": 20 } } }

执行前提条件 POST请求 _search下 必须在query请求体中 FIELD 你的字段名 gte 大于等于gt 大于 lte小于等于 lt 小于

在rang请求体中还可以加入 "format": "dd/MM/yyyy||yyyy"来格式化type为date型的字段

"query": { "range": { "FIELD": { "gte": "2020-01-01", "lte": "2020-12-30", "format":"yyyy-MM-dd" } } } 2.rang for bool

可以完美嵌入must、 not_must中作为指定条件

"query": { "bool": { "must": [{ "range": { "FIELD": { "gte": 1, *注意01写法会引发语法异常* "lte": 20 } } }] } }

可以与match、term等灵活组合

{ "query": { "bool": { "must": [{ "match": { "FIELD": "TEXT" } }, { "term": { "FIELD": { "value": "" } } }, { "range": { "delivery_amount": { "gte": 1, "lte": 20 } } } ] } } } 3.rang for filter

使用filter过滤器的大部分原因是希望es进行缓存以及不计算评分

{ "query": { "bool": { "filter": { "range": { "FIELD": { "gte": 10, "lte": 20 } } } } } } 4. rang for aggs

Elasticsearch提供了多种聚合方式,能帮助用户快速的进行信息统计与分类,本篇主要讲解下如何使用Range区间聚合。 最简单的例子,想要统计一个班级考试60分以下、60到80分、80到100分,在ES中只要一个命令就可以轻松统计.... 更多资料参考:Elasticsearch文档翻译 注意:to不带有包含的意思 而from是有的

聚合例子 按照前言中的例子,可以执行下面的命令:

{ "aggs":{ "grade_ranges":{ "range":{ "field":"grade", "ranges":[ {"to":60}, {"from":60,"to":80}, {"from":80}] } } } }

得到如下的结果:

{ "aggregations":{ "price_ranges":{ "buckets":[ { "to":60, "doc_count":2 }, { "from":60, "to":80, "doc_count":32 }, { "from":80, "doc_count":14 } ] } } }

复杂点的例子,指定每个区间的名字 可以通过设置keyed:true,使每个区间都返回一个特定的名字:

{ "aggs":{ "price_ranges":{ "range":{ "field":"price", "keyed":true, "ranges":[ {"to":50}, {"from":50,"to":100}, {"from":100} ] } } } }

默认会按照区间命名:

{ "aggregations":{ "price_ranges":{ "buckets":{ "*-50.0":{ "to":50, "doc_count":2 }, "50.0-100.0":{ "from":50, "to":100, "doc_count":4 }, "100.0-*":{ "from":100, "doc_count":4 } } } } }

当然也可以指定区间的名字:

{ "aggs":{ "price_ranges":{ "range":{ "field":"price", "keyed":true, "ranges":[ {"key":"cheap","to":50}, {"key":"average","from":50,"to":100}, {"key":"expensive","from":100} ] } } } }

使用脚本 与其他的聚合类似,Range聚合支持脚本的使用:

{ "aggs":{ "price_ranges":{ "range":{ "script":"doc['price'].value", "ranges":[ {"to":50}, {"from":50,"to":100}, {"from":100} ] } } } } 聚合嵌套 rang

通常在区间聚合中,都会嵌套子聚合,比如我们在每个区间中做统计stats聚合:

{ "aggs":{ "price_ranges":{ "range":{ "field":"price", "ranges":[ {"to":50}, {"from":50,"to":100}, {"from":100} ]}, "aggs":{ "price_stats":{ "stats":{ "field":"price" } } } } } }

那么得到的结果会如下所示:

{ "aggregations":{ "price_ranges":{ "buckets":[ { "to":50, "doc_count":2, "price_stats":{ "count":2, "min":20, "max":47, "avg":33.5, "sum":67 } }, { "from":50, "to":100, "doc_count":4, "price_stats":{ "count":4, "min":60, "max":98, "avg":82.5, "sum":330 } }, { "from":100, "doc_count":4, "price_stats":{ "count":4, "min":134, "max":367, "avg":216, "sum":864 } } ] } } }

如果不指定聚合的字段,那么默认会按照Range聚合的字段来做统计:

{ "aggs":{ "price_ranges":{ "range":{ "field":"price", "ranges":[ {"to":50}, {"from":50,"to":100}, {"from":100} ] }, "aggs":{ "price_stats":{ "stats":{} } } } } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有