一个人的es学习总结笔记
立即下载
资源介绍:
一个人的es学习总结笔记
es对照mysql https://www.jianshu.com/p/c8df703f3566
1 select 字段
当你只需要查询某些字段时(不写则默认全部字段)
GET index_name/_search
{
"_source": ["name","mobile]
}
不想要某些字段时
GET index_name/_search
{
"_source": {
excludes: ["age","email]
}
}
match是分词查询,es会将数据分词(关键词)保存 比如 zhang san 会分为zhang 和 san 两个分词,满足其中一个就能查出来
2.模糊匹配(此功能对text类型才有效,当查询的是非字符串时,为精确匹配) 如果name字段的数据类型是text类型,搜索关键词会进行分词处理
GET index_name/_search
{
"query": {
"_source": ["name","age"] //只查询这些索引中的这些字段
"match": {
"name": "小明" //小明 就是分词
}
}
}
3.精确匹配 等值查询 BoolQueryBuild queryBuild = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("name","小李"))
term是完整查询,es会将数据分词(关键词)保存 比如 zhang san 会分为zhang 和 san 两个分词,但是term中,分词必须完全匹配value值才能查询出来
GET index_name/_search
{
"query": {
"term": {
“name": "小明"
}
}
}
4.多值精准匹配 类似于sql中的in功能
GET index_name/_search
{
"query": {
"terms": {
name: ["小明",“小红”]
}
}
}
5.范围查询
gt 大于
gte 大于等于
lt 小于
lte 小于等于
GET index_name/_search
{
"query": {
"range": {
"age": {
"gte": 23,
"lte": 30
}
}
}
}
前缀查询
GET index_name/_search{
"query": {
"prefix": {
"name": "C"
}
}
}
找到name字段中所有以C开头的文档
通配符查询
GET index_name/_search{
"query": {
"wildcard": {
"name": "*ly*"
}
}
}
正则 regexp 查询
GET index_name/_search{
"query": {
"regexp": {
"字段名": "正则表达式"
}
}
}
模糊匹配(Match Query):使用模糊匹配进行搜索。例如,使用"elasticsearch"可以匹配到"elasticsearch"
{
"query": {
"match": {
"field_name": {
"query": "elasticsearch",
"fuzziness": "AUTO"
}
}
}
}
Nested Query(嵌套查询)
POST /products/_search
{
"query": {
"nested": {
"path": "reviews",
"query": {
"match": {
"reviews.comment": "good"
}
}
}
}
}
使用nested查询进行嵌套查询。 在reviews嵌套字段中根据reviews.comment字段的值查询"good"的文档。
Aggregation Query(聚合查询)
bool组合查询
在es中bool就是用来组合布尔查询条件,布尔查询条件就是类似sql中的and,or
GET index_name/_search
{
"query": {
"bool": {
"must": [], //must条件,类似sql中的and
"must_not": [], //must_not条件,跟must相反
"should": [] //should条件,类似sql中or
}
}
}
where and功能
GET index_name/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "小明"
}
},
{
"match": {
"age": 18
}
}
]
}
}
}
where or功能
GET index_name/_search
{
"query": {
"bool": {
//满足任意一个即可
"minimum_should_match
"should": [
{"match": {
"name": "小明"
}
},
{ "match": {
"age": 18
}
}
]
}
}
}
group by功能
GET index_name/_search
{
"query": {
//查询所有数据
"match_all": {}
},
"aggs": {
//按名称分组
“nameAggs": {
"terms": {
"field": "name"
}
}
}
}
order by功能
GET index_name/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"name": {
"order": "desc"
}
},
{
"age": {
"order": "desc"
}
}
]
}
分页查询
GET index_name/_search
{
"query": {
//查询所有数据 使用match_all,匹配所有文档,默认只会返回10条数据
"match_all": {}
},
"from": 1,
"size": 10
}
count 功能
GET index_name/_count
must和should共存情况
分组查询
"size": 0 展示的索引数据0条,便于查看分组信息,不然太杂乱
"field": "age" 表示对age进行分组
GET index_name/_search
{
"query": {
//查询所有数据
"match_all": {}
},
"aggs": {
"分组名称-agegroups": {
"terms": { //terms则是用来分组的关键字
"field": "age"
}
}
},
"size": 0
}
分组后聚合(求和)
//先按年龄分组,再计算年龄之和;再agegroups分组中,再次对age进行求和
GET index_name/_search
{
"query": {
//查询所有数据
"match_all": {}
},
"aggs": {
"agegroups": {
"terms": {
"field": "age"
}
},
"aggs": {
"agesum": {
"sum": {
"field": "age"
}
}
}
},
"size": 0
}
分组查询年龄平均值
GET index_name/_search
{
"query": {
//查询所有数据
"match_all": {}
},
"aggs": {
"ageavg": {
"avg": {
"field": "age"
}
}
}
}
https://blog.csdn.net/lkx021699/article/details/141262267?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-141262267-blog-131939978.235^v43^pc_blog_bottom_relevance_base3&spm=1001.2101.3001.4242.1&utm_relevant_index=3
分组查询年龄前三名
GET index_name/_search
{
"aggs": {
"top3": {
"top_hits": {
"size": 3,
"sort": {
"order": "desc"
}
}
}
}
}
}
POST index_name/_search
{
"size": 0,
"aggregations": {
"avg_price": {
"avg": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
},
"category_count": {
"terms": {
"field": "category"
}
}
}
}
使用aggregations进行聚合查询。 avg聚合计算了price字段的平均值。 max聚合计算了price字段的最大值。
terms聚合按category字段进行分组统计。 返回计算和统计结果,包括平均价格、最高价格和每个分类的文档数量
https://www.cnblogs.com/RunningSnails/p/17972959
es中的聚合,包含多种类型,最常用的两种,一个叫桶,一个叫度量
按照某种方式对数据进行分组,每一组数据在es中称为一个桶。如按照年龄段对人进行划分,0~10,10~20,20~30等
bucket aggregations 只负责对数据进行分组,不会进行计算。若要获得统计的数据,bucket中需要嵌套另一种聚合,metrics aggregations 即度量。