Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES的常用查询与聚合

ES的常用查询与聚合

作者头像
阿泽
发布于 2019-09-24 10:02:41
发布于 2019-09-24 10:02:41
6.5K00
代码可运行
举报
运行总次数:0
代码可运行

0 说明

基于es 5.4和es 5.6,列举的是个人工作中经常用到的查询(只是工作中使用的是Java API),如果需要看完整的,可以参考官方相关文档 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search.html。

1 查询

先使用一个快速入门来引入,然后后面列出的各种查询都是用得比较多的(在我的工作环境是这样),其它没怎么用的这里就不列出了。

1.1 快速入门

1.1.1 查询全部
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET index/type/_search
{
    "query":{
        "match_all":{}
    }
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET index/type/_search
1.1.2 分页(以term为例)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET index/type/_search
{
    "from":0,
    "size":100,
    "query":{
        "term":{
            "area":"GuangZhou"
        }
    }
}
1.1.3 包含指定字段(以term为例)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET index/type/_search
{
    "_source":["hobby", "name"],
    "query":{
        "term":{
            "area":"GuangZhou"
        }
    }
}
1.1.4 排序(以term为例)

单个字段排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET index/type/_search
{
    "query":{
        "term":{
            "area":"GuangZhou"
        }
    },
    "sort":[
        {"user_id":{"order":"asc"}},
        {"salary":{"order":"desc"}}
    ]
}

1.2 全文查询

查询字段会被索引和分析,在执行之前将每个字段的分词器(或搜索分词器)应用于查询字符串。

1.2.1 match query
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "match": {
      "content": {
        "query": "里皮恒大",
        "operator": "and"
      }
    }
  }
}

operator默认是or,也就是说,“里皮恒大”被分词为“里皮”和“恒大”,只要content中出现两个之一,都会搜索到;设置为and之后,只有同时出现都会被搜索到。

1.2.2 match_phrase query

文档同时满足下面两个条件才会被搜索到:

  • (1)分词后所有词项都要出现在该字段中
  • (2)字段中的词项顺序要一致
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "match_phrase": {
      "content": "里皮恒大"
    }
  }
}

1.3 词项查询

词项搜索时对倒排索引中存储的词项进行精确匹配,词项级别的查询通过用于结构化数据,如数字、日期和枚举类型。

1.3.1 term query
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "term": {
      "postdate": "2015-12-10 00:41:00"
    }
  }
}
1.3.2 terms query

term的升级版,如上面查询的postdate字段,可以设置多个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "terms": {
      "postdate": [
        "2015-12-10 00:41:00",
        "2016-02-01 01:39:00"
      ]
    }
  }
}

因为term是精确匹配,所以不要问,[]中的关系怎么设置and?这怎么可能,既然是精确匹配,一个字段也不可能有两个不同的值。

1.3.3 range query

匹配某一范围内的数据型、日期类型或者字符串型字段的文档,注意只能查询一个字段,不能作用在多个字段上。

数值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "range": {
      "reply": {
        "gte": 245,
        "lte": 250
      }
    }
  }
}

支持的操作符如下: gt:大于,gte:大于等于,lt:小于,lte:小于等于

日期:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "range": {
      "postdate": {
        "gte": "2016-09-01 00:00:00",
        "lte": "2016-09-30 23:59:59",
        "format": "yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}

format不加也行,如果写的时间格式正确。

1.3.4 exists query

返回对应字段中至少有一个非空值的文档,也就是说,该字段有值(待会会说明这个概念)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "exists": {
      "field": "user"
    }
  }
}

参考《从Lucene到Elasticsearch:全文检索实战》中的说明。

以下文档会匹配上面的查询:

文档

说明

{"user":"jane"}

有user字段,且不为空

{"user":""}

有user字段,值为空字符串

{"user":"-"}

有user字段,值不为空

{"user":["jane"]}

有user字段,值不为空

{"user":["jane",null]}

有user字段,至少一个值不为空即可

下面的文档不会被匹配:

文档

说明

{"user":null}

虽然有user字段,但是值为空

{"user":[]}

虽然有user字段,但是值为空

{"user":[null]}

虽然有user字段,但是值为空

{"foo":"bar"}

没有user字段

1.3.5 ids query

查询具有指定id的文档。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "ids": {
      "type": "news",
      "values": "2101"
    }
  }
}

类型是可选的,也可以以数据的方式指定多个id。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "ids": {
      "values": [
        "2101",
        "2301"
      ]
    }
  }
}

1.4 复合查询

1.4.1 bool query

因为工作中接触到关于es是做聚合、统计、分类的项目,经常要做各种复杂的多条件查询,所以实际上,bool query用得非常多,因为查询条件个数不定,所以处理的逻辑思路时,外层用一个大的bool query来进行承载。(当然,项目中是使用其Java API)

bool query可以组合任意多个简单查询,各个简单查询之间的逻辑表示如下:

属性

说明

must

文档必须匹配must选项下的查询条件,相当于逻辑运算的AND

should

文档可以匹配should选项下的查询条件,也可以不匹配,相当于逻辑运算的OR

must_not

与must相反,匹配该选项下的查询条件的文档不会被返回

filter

和must一样,匹配filter选项下的查询条件的文档才会被返回,但是filter不评分,只起到过滤功能

一个例子如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "content": "里皮"
        }
      },
      "must_not": {
        "match": {
          "content": "中超"
        }
      }
    }
  }
}

需要注意的是,同一个bool下,只能有一个must、must_not、should和filter。

如果希望有多个must时,比如希望同时匹配"里皮"和"中超",但是又故意分开这两个关键词(因为事实上,一个must,然后使用match,并且operator为and就可以达到目的),怎么操作?注意must下使用数组,然后里面多个match对象就可以了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 1,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content": "里皮"
          }
        },
        {
          "match": {
            "content": "恒大"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]
}

当然must下的数组也可以是多个bool查询条件,以进行更加复杂的查询。

上面的查询等价于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "content": {
            "query": "里皮恒大",
            "operator": "and"
          }
        }
      }
    }
  },
  "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]
}

1.5 嵌套查询

先添加下面一个索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "user":{
          "type": "nested",
          "properties": {
            "first":{"type":"keyword"},
            "last":{"type":"keyword"}
          }
        },
        "group":{
          "type": "keyword"
        }
      }
    }
  }
}

添加数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT my_index/my_type/1
{
  "group":"GuangZhou",
  "user":[
    {
      "first":"John",
      "last":"Smith"
    },
    {
      "first":"Alice",
      "last":"White"
    }
  ]
}

PUT my_index/my_type/2
{
  "group":"QingYuan",
  "user":[
    {
      "first":"Li",
      "last":"Wang"
    },
    {
      "first":"Yonghao",
      "last":"Ye"
    }
  ]
}

查询:

较简单的查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "term": {
          "user.first": "John"
        }
      }
    }
  }
}

较复杂的查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "bool": {
      "must": [
        {"nested": {
          "path": "user",
          "query": {
            "term": {
              "user.first": {
                "value": "Li"
              }
            }
          }
        }},
        {
          "nested": {
            "path": "user",
            "query": {
              "term": {
                "user.last": {
                  "value": "Wang"
                }
              }
            }
          }
        }
      ]
    }
  }
}

1.6 补充:数组查询与测试

添加一个索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT my_index2
{
  "mappings": {
    "my_type2":{
      "properties": {
        "message":{
          "type": "text"
        },
        "keywords":{
          "type": "keyword"
        }
      }
    }
  }
}

添加数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT /my_index2/my_type/1
{
  "message":"keywords test1",
  "keywords":["美女","动漫","电影"]
}

PUT /my_index2/my_type/2
{
  "message":"keywords test2",
  "keywords":["电影","美妆","广告"]
}

搜索:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "query": {
    "term": {
      "keywords": "广告"
    }
  }
}

Note1:注意设置字段类型时,keywords设置为keyword,所以使用term查询可以精确匹配,但设置为text,则不一定——如果有添加分词器,则可以搜索到;如果没有,而是使用默认的分词器,只是将其分为一个一个的字,就不会被搜索到。这点尤其需要注意到。 Note2:对于数组字段,也是可以做桶聚合的,做桶聚合的时候,其每一个值都会作为一个值去进行分组,而不是整个数组进行分组,可以使用上面的进行测试,不过需要注意的是,其字段类型不能为text,否则聚合会失败。 Note3:所以根据上面的提示,一般纯数组比较适合存放标签类的数据,就像上面的案例一样,同时字段类型设置为keyword,而不是text,搜索时进行精确匹配就好了。

1.7 滚动查询scroll

如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完(es返回的scrollId,可以理解为是es进行此次查询的操作句柄标识,每发送一次该scrollId,es都会操作一次,或者说循环一次,直到时间窗口到期)。

使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来,scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的,每次发送scroll请求,我们还需要指定一个scoll参数,指定一个时间窗口,每次搜索请求只要在这个时间窗口内能完成就可以了(也就是说,该scrollId只在这个时间窗口内有效,视图快照也是)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET spnews/news/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "size": 10,
  "_source": ["id"]
}

GET _search/scroll
{
  "scroll":"1m",
  "scroll_id":"DnF1ZXJ5VGhlbkZldGNoAwAAAAAAADShFmpBMjJJY2F2U242RFU5UlAzUzA4MWcAAAAAAAA0oBZqQTIySWNhdlNuNkRVOVJQM1MwODFnAAAAAAAANJ8WakEyMkljYXZTbjZEVTlSUDNTMDgxZw=="
}

2 聚合

2.1 指标聚合

相当于MySQL的聚合函数。

max
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "max_id": {
      "max": {
        "field": "id"
      }
    }
  }
}

size不设置为0,除了返回聚合结果外,还会返回其它所有的数据。

min
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "min_id": {
      "min": {
        "field": "id"
      }
    }
  }
}
avg
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "avg_id": {
      "avg": {
        "field": "id"
      }
    }
  }
}
sum
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "sum_id": {
      "sum": {
        "field": "id"
      }
    }
  }
}
stats
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "stats_id": {
      "stats": {
        "field": "id"
      }
    }
  }
}

2.2 桶聚合

相当于MySQL的group by操作,所以不要尝试对es中text的字段进行桶聚合,否则会失败。

Terms

相当于分组查询,根据字段做聚合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "per_count": {
      "terms": {
        "size":100,
        "field": "vtype",
        "min_doc_count":1
      }
    }
  }
}

在桶聚合的过程中还可以进行指标聚合,相当于mysql做group by之后,再做各种max、min、avg、sum、stats之类的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "per_count": {
      "terms": {
        "field": "vtype"
      },
      "aggs": {
        "stats_follower": {
          "stats": {
            "field": "realFollowerCount"
          }
        }
      }
    }
  }
}
Filter

相当于是MySQL根据where条件过滤出结果,然后再做各种max、min、avg、sum、stats操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "gender_1_follower": {
      "filter": {
        "term": {
          "gender": 1
        }
      },
      "aggs": {
        "stats_follower": {
          "stats": {
            "field": "realFollowerCount"
          }
        }
      }
    }
  }
}

上面的聚合操作相当于是:查询gender为1的各个指标。

Filters

在Filter的基础上,可以查询多个字段各自独立的各个指标,即对每个查询结果分别做指标聚合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "gender_1_2_follower": {
      "filters": {
        "filters": [
          {
            "term": {
              "gender": 1
            }
          },
          {
            "term": {
              "gender": 2
            }
          }
        ]
      },
      "aggs": {
        "stats_follower": {
          "stats": {
            "field": "realFollowerCount"
          }
        }
      }
    }
  }
}
Range
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "size": 0,
  "aggs": {
    "follower_ranges": {
      "range": {
        "field": "realFollowerCount",
        "ranges": [
          {
            "to": 500
          },
          {
            "from": 500,
            "to": 1000
          },
          {
            "from": 1000,
            "to": 1500
          },
          {
            "from": "1500",
            "to": 2000
          },
          {
            "from": 2000
          }
        ]
      }
    }
  }
}

to:小于,from:大于等于

Date Range

跟上面一个类似的,其实只是字段为日期类型的,然后范围值也是日期。

Date Histogram Aggregation

这个功能十分有用,可以根据年月日来对数据进行分类。 索引下面的文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE my_blog

PUT my_blog
{
  "mappings": {
    "article":{
      "properties": {
        "title":{"type": "text"},
        "postdate":{
          "type": "date"
          , "format": "yyyy-MM-dd HH:mm:ss"
        }
      }
    }
  }
}

PUT my_blog/article/1
{
  "title":"Elasticsearch in Action",
  "postdate":"2014-09-23 23:34:12"
}

PUT my_blog/article/2
{
  "title":"Spark in Action",
  "postdate":"2015-09-13 14:12:22"
}

PUT my_blog/article/3
{
  "title":"Hadoop in Action",
  "postdate":"2016-08-23 23:12:22"
}

按年对数据进行聚合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET my_blog/article/_search
{
  "size": 0,
  "aggs": {
    "agg_year": {
      "date_histogram": {
        "field": "postdate",
        "interval": "year",
        "order": {
          "_key": "asc"
        }
      }
    }
  }
}

{
  "took": 18,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "agg_year": {
      "buckets": [
        {
          "key_as_string": "2014-01-01 00:00:00",
          "key": 1388534400000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-01-01 00:00:00",
          "key": 1420070400000,
          "doc_count": 1
        },
        {
          "key_as_string": "2016-01-01 00:00:00",
          "key": 1451606400000,
          "doc_count": 1
        }
      ]
    }
  }
}

按月对数据进行聚合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET my_blog/article/_search
{
  "size": 0,
  "aggs": {
    "agg_year": {
      "date_histogram": {
        "field": "postdate",
        "interval": "month",
        "order": {
          "_key": "asc"
        }
      }
    }
  }
}

这样聚合的话,包含的年份的每一个月的数据都会被分类,不管其是否包含文档。

按日对数据进行聚合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET my_blog/article/_search
{
  "size": 0,
  "aggs": {
    "agg_year": {
      "date_histogram": {
        "field": "postdate",
        "interval": "day",
        "order": {
          "_key": "asc"
        }
      }
    }
  }
}

这样聚合的话,包含的年份的每一个月的每一天的数据都会被分类,不管其是否包含文档。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Flink实战应用指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
020.Elasticsearch搜索操作高级篇
如果一次性要查寻大量数据,比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完。
CoderJed
2020/07/16
1.9K0
es各种查询
1、GET /lib/user/_search : 查询lib索引下的user类型的全部数据
爱撒谎的男孩
2019/12/31
6.9K0
ES 查询优化(一)
1、能用term就不用match_phrase The Lucene nightly benchmarks show that a simple term query is about 10 times as fast as a phrase query, and about 20 times as fast as a proximity query (a phrase query with slop). term查询比match_phrase性能要快10倍,比带slop的match_phrase快2
YG
2018/05/23
5K1
数万字长文带你入门elasticsearch
es会根据创建的文档动态生成映射,可以直接将动态生成的映射直接复制到需要自定义的mapping中
没有故事的陈师傅
2022/04/05
1.8K0
Elasticsearch入门——搜索与聚合
Elasticsearch作为分布式搜索引擎可以说应用非常广了,可以用于站内搜索,日志查询等功能。本文将着重介绍Elasticsearch的搜索与聚合功能。
灬沙师弟
2024/01/11
2250
Elasticsearch入门——搜索与聚合
ES查询和聚合的基础使用
数据是index为bank,accounts.json 下载地址 (如果你无法下载,也可以clone ES的官方仓库 ,然后进入/docs/src/test/resources/accounts.json目录获取)
Linux运维技术之路
2024/02/29
2020
ES查询和聚合的基础使用
Elasticsearch基本使用
可以在https://www.elastic.co/cn/downloads/elasticsearch这个页面找到elasticsearch对应系统的安装包,elasticsearch用java开发的, 最新的版本内置了对应的jdk, 通过下面的方式能快速启动:
良辰美景TT
2020/12/14
6600
Elasticsearch的R在这里,查询与聚合
term是用于精确匹配的,类似于sql语句中的“=”,因为“name”字段用的是standard默认分词器,其会将“张三”分成“张”和“三”,并不会匹配姓名为“张三”的人,而name.keyword可以让其不会进行分词。
Liusy
2020/09/01
3.2K0
Elasticsearch的R在这里,查询与聚合
ES入门:查询和聚合
向 Elasticsearch 索引 customer 的 _doc 类型的文档 id 为 1 的文档发送 PUT 请求的例子。
不惑
2023/11/01
8970
ES入门:查询和聚合
Python Elasticsearch DSL 查询、过滤、聚合操作
Index:Elasticsearch用来存储数据的逻辑区域,它类似于关系型数据库中的database 概念。一个index可以在一个或者多个shard上面,同时一个shard也可能会有多个replicas。
程序员小新
2022/01/06
3.8K0
ElasticSearch 6.x 学习笔记:17.词项查询
词项查询官网: https://www.elastic.co/guide/en/elasticsearch/reference/6.1/term-level-queries.html
程裕强
2022/05/06
1.3K0
DSL语言高级查询
对一个字段进行匹配查询,match 类型查询,match 类型查询,会把查询条件进行分词,or 关系,多个词条之间是 or 的关系:
程序员NEO
2023/09/27
3640
DSL语言高级查询
像SELECT*一样手撸Query DSL——ElasticSearch下篇
大家好 泥腿子安尼特又和大家见面了。不知道大家昨晚过的如何,容我再孤寡孤寡孤寡几声
老李秀
2020/08/31
1.6K0
学好Elasticsearch系列-聚合查询
Elasticsearch中的聚合是一种以结构化的方式提取和展示数据的机制。可以把它视为SQL中的GROUP BY语句,但是它更加强大和灵活。
BookSea
2023/08/08
5460
学好Elasticsearch系列-聚合查询
ES常用知识点整理第一部分
第三列倒排索引包含的信息为(文档ID,单词频次,<单词位置>),比如单词“乔布斯”对应的倒排索引里的第一项(1;1;<1>)意思是,文档1包含了“乔布斯”,并且在这个文档中只出现了1次,位置在第一个。
大忽悠爱学习
2023/02/13
5180
ES常用知识点整理第一部分
ES服务 聚合查询之Metric聚合详解
上面的汇总计算了所有文档的成绩统计信息。聚合类型为extended_stats,并且字段设置定义将在其上计算统计信息的文档的数字字段。
Linux运维技术之路
2024/03/07
2600
ES服务 聚合查询之Metric聚合详解
触类旁通Elasticsearch:聚合
熟悉SQL的用户一定对聚合不会陌生,简单说任何应用于group by的查询都会执行一个聚合操作。ES的聚合(aggregation)加载和搜索相匹配的文档,并且完成各种统计型的计算。
用户1148526
2019/05/25
3.2K0
一起学Elasticsearch系列-聚合查询
聚合查询是 Elasticsearch 中一种强大的数据分析工具,用于从索引中提取和计算有关数据的统计信息。聚合查询可以执行各种聚合操作,如计数、求和、平均值、最小值、最大值、分组等,以便进行数据汇总和分析。
BookSea
2023/11/28
7690
一起学Elasticsearch系列-聚合查询
ES数据库操作入门总结「建议收藏」
elasticsearch总的来说应该算是一个搜索引擎,公司使用一般是作为日志结果查询。 json文档格式,倒排索引的快速以及分布式的特性,使得es可以在大量数据中快速查询到结果。
全栈程序员站长
2022/08/27
1.4K0
ES数据库操作入门总结「建议收藏」
[692]python操作Elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。下面介绍了利用Python API接口进行数据查询,方便其他系统的调用。
周小董
2022/04/13
1.7K0
相关推荐
020.Elasticsearch搜索操作高级篇
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验