4. 条件查询

  首先区分下match,match_phrase,term,  参考:https://zhuanlan.zhihu.com/p/592767668?utm_id=0

1、全量查询+分页+指定source

示例:请求地址为http://127.0.0.1:9200/students/_search,请求体为:

{
    "query": {
        "match_all": {}
    },
    "from": 0,
    "size": 2,
    "_source": [
        "姓名",
        "年级",
        "班级"
    ],
    "sort": {
        "班级": {
            "order": "desc"
        }
    }
}

  1. 请求体中的match_all表示匹配所有
  2. 请求体中from和size用于分页查询,from表示第一个元素的位置(从0开始),size表示要查询的数量。
  3. 请求体中_source是一个列表,指定要查询的列。
  4. 请求体中的sort用于结果排序,order取值asc(升序),desc(降序)
  5. 返回结果中的took表示查询耗时

2. 单条件查询

查询5年级的学生,请求body:

{
    "query": {
        "match": {
            "年级":5
        }
    }
}

  1. 请求体中match表示匹配一个条件

3. 多条件查询

3.1 基本多条件查询

3.1.1 多个条件同时匹配

查询5年级2班的学生,请求body:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "年级": 5
                    }
                },
                {
                    "match": {
                        "班级": 2
                    }
                }
            ]
        }
    }
}
  1. bool 表示一个条件,条件为true表示匹配,false表示不匹配,其下可以使用must,should,filter等多个条件。
  2. must可以设置多个条件,是一个数组,表示其下的条件必须全部匹配
  3. 把must改为should,表示其下的条件满足一个即可

3.1.2 满足至少一个条件

查找1班和2班的学生:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "班级": 1
                    }
                },
                {
                    "match": {
                        "班级": 2
                    }
                }
            ]
        }
    }
}

3.1.3 范围查询

   must表示多个条件同时满足,should表示至少匹配一个条件,filter表示过滤查询;范围使用range匹配(和match,match_all相同,指定具体条件)。

例如查询5年级1班和2班的学生:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "年级": 5
                    }
                }
            ],
            "filter": {
                "range": {
                    "班级": {
                        "gte": 1,
                        "lte": 2
                    }
                }
            }
        }
    }
}

4. 分组查询(聚合查询)

{
    "aggs": {
        "班级分组": {
            "terms": {
                "field": "班级"
            }
        }
    }
}

更多的时候,我们只想要分组统计,不需要查询原始数据,可以设置查询size为0

{
    "aggs": {
        "班级分组": {
            "terms": {
                "field": "班级"
            }
        }
    },
    "size": 0
}
  1. 请求中的terms表示分组统计,其他的关键字还有:avg(对field指定的字段取平均值)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值