1.term的多种查询

  • 介绍:

    • 单词级别的查询
    • 这些查询通常用于结构化的查询,比如:number,date,keyword等,而不是text
    • 也就是说,全⽂本查询之前要先对⽂本内容进⾏分词,⽽单词级别的查询直接在相应字段的
      反向索引中精确查找,单词级别的查询⼀般⽤于数值、⽇期等类型的字段上
  • Term Query精确匹配查询(查找号码为23的球员)
请求:POST nba/_search{"query": {"term": {"jerseyNo": "23"}}}
  • Exsit Query 在特定的字段中查找⾮空值的⽂档(查找队名⾮空的球员)
请求:POST nba/_search{"query": {"exists": {"field": "teamNameEn"}}}
  • Prefix Query 查找包含带有指定前缀term的⽂档(查找队名以Rock开头的球员)
请求:POST nba/_search{"query":{"prefix":{"teamNameEn" : "Rock"}}}
  • Wildcard Query ⽀持通配符查询,*表示任意字符,?表示任意单个字符(查找⽕箭队的球员)
POST nba/_search{"query": {"wildcard": {"teamNameEn": "Ro*s"}}
}
  • Regexp Query 正则表达式查询(查找⽕箭队的球员)
POST nba/_search{"query": {"regexp": {"teamNameEn": "Ro.*s"}}
}
  • Ids Query(查找id为1和2的球员)
POST nba/_search{"query": {"ids": {"values": [1, 2]}}
}

2.es的范围搜索

  • 查找指定字段在指定范围内包含值(⽇期、数字或字符串)的⽂档。

    • 查找在nba打了2年到10年以内的球员
POST nba/_search{"query": {"range": {"playYear": {"gte": 2, "lte": 10}}}
}

3.es的布尔查询

  • 布尔查询
type description
must 必须出现在匹配⽂档中
filter 必须出现在⽂档中,但是不打分
must_not 不能出现在⽂档中
should 应该出现在⽂档中
  • must(查找名字叫做james的球员)
POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}]}}
}
  • 效果同must,但是不打分(查找名字叫做James的球员)
POST /nba/_search{"query": {"bool": {"filter": [{"match": {"displayNameEn": "james"}}]}}
}
  • must_not (查找名字叫做James的⻄部球员)
POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}]}}
}
  • should(查找名字叫做James的打球时间应该在11到20年⻄部球员)

    • 即使匹配不到也返回,只是评分不同
POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}], "should": [{"range": {"playYear": {"gte": 11, "lte": 20}}}]}}
}
  • 如果minimum_should_match=1,则变成要查出名字叫做James的打球时间在11到20年⻄部 球员
POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}], "should": [{"range": {"playYear": {"gte": 11, "lte": 20}}}], "minimum_should_match": 1}}
}

4.es的排序查询

  • ⽕箭队中按打球时间从⼤到⼩排序的球员
POST nba/_search{"query": {"match": {"teamNameEn": "Rockets"}}, "sort": [{"playYear": {"order": "desc"}}]
}
  • ⽕箭队中按打球时间从⼤到⼩,如果年龄相同则按照身⾼从⾼到低排序的球员
POST nba/_search{"query": {"match": {"teamNameEn": "Rockets"}}, "sort": [{"playYear": {"order": "desc"}}, {"heightValue": {"order": "asc"}}]
}

5.es聚合查询之指标聚合

  • ES聚合分析是什么

    • 聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找 出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎 兼数据库,同样提供了强⼤的聚合分析能⼒。
    • 对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
    • ⽽关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上 进⾏指标聚合。在ES中称为桶聚合
  • max min sum avg
    • 求出火箭队球员的平均年龄
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}, "size": 0
}
  • value_count 统计⾮空字段的⽂档数

    • 求出⽕箭队中球员打球时间不为空的数量
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"countPlayerYear": {"value_count": {"field": "playYear"}}}, "size": 0
}
  • 查出⽕箭队有多少名球员
POST nba/_count{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}
}
  • Cardinality 值去重计数

    • 查出⽕箭队中年龄不同的数量
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"counAget": {"cardinality": {"field": "age"}}}, "size": 0
}
  • stats 统计count max min avg sum 5个值

    • 查出⽕箭队球员的年龄stats
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"statsAge": {"stats": {"field": "age"}}}, "size": 0
}
  • Extended stats ⽐stats多4个统计结果: 平⽅和、⽅差、标准差、平均值加/减两个标准差的区间

    • 查出⽕箭队球员的年龄Extend stats
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"extendStatsAge": {"extended_stats": {"field": "age"}}}, "size": 0
}
  • Percentiles 占⽐百分位对应的值统计,默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值

    • 查出⽕箭的球员的年龄占⽐
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"pecentAge": {"percentiles": {"field": "age"}}}, "size": 0
}
  • 查出⽕箭的球员的年龄占⽐(指定分位值)
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"percentAge": {"percentiles": {"field": "age", "percents": [20, 50, 75]}}}, "size": 0
}

6.es聚合查询之桶聚合

  • Terms Aggregation 根据字段项分组聚合

    • ⽕箭队根据年龄进⾏分组
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10}}}, "size": 0
}
  • order 分组聚合排序

    • ⽕箭队根据年龄进⾏分组,分组信息通过年龄从⼤到⼩排序 (通过指定字段)
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10, "order": {"_key": "desc"}}}}, "size": 0
}
  • ⽕箭队根据年龄进⾏分组,分组信息通过⽂档数从⼤到⼩排序 (通过⽂档数)
POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10, "order": {"_count": "desc"}}}}, "size": 0
}
  • 每⽀球队按该队所有球员的平均年龄进⾏分组排序 (通过分组指标值)
POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}
  • 筛选分组聚合

    • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (指定值列表)
POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "include": ["Lakers", "Rockets", "Warriors"], "exclude": ["Warriors"], "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}
  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (正则表达式匹配值)
POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "include": "Lakers|Ro.*|Warriors.*", "exclude": "Warriors", "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}
  • Range Aggregation 范围分组聚合

    • NBA球员年龄按20,20-35,35这样分组
POST /nba/_search{"aggs": {"ageRange": {"range": {"field": "age", "ranges": [{"to": 20}, {"from": 20, "to": 35}, {"from": 35}]}}}, "size": 0
}
  • NBA球员年龄按20,20-35,35这样分组 (起别名)
POST /nba/_search{"aggs": {"ageRange": {"range": {"field": "age", "ranges": [{"to": 20, "key": "A"}, {"from": 20, "to": 35, "key": "B"}, {"from": 35, "key": "C"}]}}}, "size": 0
}
  • Date Range Aggregation 时间范围分组聚合

    • NBA球员按出⽣年⽉分组
POST /nba/_search{"aggs": {"birthDayRange": {"date_range": {"field": "birthDay", "format": "MM-yyy", "ranges": [{"to": "01-1989"}, {"from": "01-1989", "to": "01-1999"}, {"from": "01-1999", "to": "01-2009"}, {"from": "01-2009"}]}}}, "size": 0
}
  • Date Histogram Aggregation 时间柱状图聚合

    • 按天、⽉、年等进⾏聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day (1d), hour (1h), minute (1m), second (1s) 间隔聚合
    • NBA球员按出⽣年分组
POST /nba/_search{"aggs": {"birthday_aggs": {"date_histogram": {"field": "birthDay", "format": "yyyy", "interval": "year"}}}, "size": 0
}

7.es之query_string查询

  • 介绍:query_string 查询,如果熟悉lucene的查询语法,我们可以直接⽤lucene查询语法写⼀个查 询串进⾏查询,ES中接到请求后,通过查询解析器,解析查询串⽣成对应的查询。
  • 指定单个字段查询
POST /nba/_search{"query": {"query_string": {"default_field": "displayNameEn", "query": "james OR curry"}}, "size": 100
}
  • 指定多个字段查询
POST /nba/_search{"query": {"query_string": {"fields": ["displayNameEn", "teamNameEn"], "query": "James AND Rockets"}}, "size": 100
}

elasticsearch从入门到入门系列(三)---搜索大汇总相关推荐

  1. Docker 从入门到实践系列三 - Docker 常用命令,java高级开发工程师面试问题

    容器命令 镜像运行起来后,称为容器. 下面以 Tomcat 为例 搜索镜像 docker search tomcat 下载镜像 docker pull tomcat 运行容器 运行tomcat doc ...

  2. 图解AI数学基础:从入门到精通系列教程(要点速查清单·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/83 声明:版权所有,转载请联系平台与作者并注明出处 引言 本系列教程展开讲解AI所需 ...

  3. 机器学习入门系列三(关键词:逻辑回归,正则化)

    机器学习入门系列三(关键词:逻辑回归,正则化) 目录(?)[+] 一逻辑回归 逻辑回归 假设表示 决策边界 代价函数 其他优化方法 多元分类 二正则化 一.逻辑回归 1.逻辑回归 什么是逻辑回归问题, ...

  4. 我们一直想做什么样的事情?嘴对嘴更新《Elasticsearch从入门到大师系列》

    我们一直想做什么样的事情?​ 搜索无疑是我们最最最最最最常见的需求,拥有精准.快速.成本低的搜索系统是企业长久以来的目标和业务发展的必然条件,那么提供一个支撑"三高"(高并发.高性 ...

  5. Reflex WMS入门系列三十二:导出到Excel

    Reflex WMS入门系列三十二:导出到Excel 如同SAP系统的风格 --- 凡是有list的界面,都能导出到Excel ---, Reflex WMS系统也提供了类似的功能.几乎在任何的Lis ...

  6. 小猪的C语言快速入门系列(三)

    小猪的C语言快速入门系列(三) 标签: C语言 本节引言: 在上一节中,对C语言的基本语法进行了学习,类比成学英语的话,我们现在 只是会单词而已,组成一个个句子还需要学习一些语法,本节学习的就是两对 ...

  7. Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令

    文章目录 一.前言 二.常用的命令 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Git』知道这些就够了_哔哩哔哩_bilibi ...

  8. 【ElasticSearch从入门到放弃系列 零】ElasticSearch看这一篇就够了

    大数据时代系统和业务每分每秒都产生成千上万的数据,其存储一定是不能通过关系型数据库了,当然因为数据的持久性也不能存储到内存型Nosql数据库Redis中,我们通常会将这些数据存储在能够不丢失数据的非关 ...

  9. 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

最新文章

  1. 网上整理的对于Rest和Restful api的理解
  2. RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
  3. 在Windows7中与虚拟机实现远程桌面连接
  4. 【SSM整合案例】静态资源和分页标签的添加
  5. HashMap是如何实现快速存取的
  6. 大数据正在改变客户服务的五种方式
  7. wordspress-作品展示主题Muiteer2.3.7开心版主题模板
  8. SpringBoot项目中获取yml文件的属性时实体属性类出现Spring Boot Configuration Annotation Processor not found in classpath
  9. 【100题】第十三题(输出倒数第k个节点)
  10. centos mysql开发包_CentOS 7 安装 MySQL-阿里云开发者社区
  11. Android 应用程序获得系统权限
  12. 几个跨平台移动App开发方案框架比较
  13. android获取系统剪贴板内容,android系统如何如何恢复剪贴板内容
  14. 计算机思维在生活中的应用,孩子必备的计算机思维,如何从生活中培养?
  15. 【机器学习开放项目】加州大学欧文机器学习知识库
  16. Attention Mechanisms in Computer Vision: A Survey(四)
  17. 首席新媒体运营黎想教程:3步教你如何做好社群运营
  18. 张赐荣: C#ADO.NET 操作Mysql 详细教程
  19. Thinkphp6调用企业微信官方php版本接口方法
  20. 虚拟机非正常关闭,里面的服务器重启报错:Error, some other host already uses address...

热门文章

  1. 数据链路层---差错检测和纠正
  2. 《计算广告》学习笔记(四)
  3. 汽车行业如何借助微信小程序引流
  4. 如何给电脑安装双系统,电脑安装双系统教程
  5. leetcode1567. 乘积为正数的最长子数组长度(Python3、c++)
  6. 14.2 Numpy实现逆傅里叶变换
  7. 编程小白的计算机毕业设计指导开发教程-javaweb i18n国际化的使用
  8. 解决Android自定义相机预览和照片分辨率差异的问题
  9. 公民身份证校验规则最新最全最严格(包含最后一位校验码校验)
  10. MySQL8.0登录提示caching_sha2_password问题解决方法