原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

实现对es中存储的数据进行查询分析,endpoint为_search,查询主要有两种形式:

URI Search:操作简便,方便通过命令行测试,仅包含部分查询语法

     Request Body Search:es提供完备查询语法Query DSL(Domain Specific Language)

URI Search简单介绍

通过url query参数来实现搜索,常用参数如下:

q: 指定查询语句,语法为 Query String Syntax

df: q中不指定字段时默认查询的字段,如果不指定,es会查询所有字段
sort:排序

timeout:指定超时时间,默认不超时

from,size:用于分页


  1. ##指定字段查询和 ?q=2012&df=title一样
  2. GET /movies/_search?q= title:2012&sort=year:asc&from=0&size=10

Request Body Search 简单介绍

将查询语句通过http request body 发送到es,主要包含如下参数:

  • query: 符合Query DSL语法的查询语句
  • from,size
  • timeout
  • sort

URI Search详解

Query String Syntax

  1 泛查询与指定字段查询

q=2012/q= title:2012

泛查询 全字段查询 不字段字段


  1. ## 泛查询 和 指定字段查询
  2. ##指定字段查询和 ?q=2012&df=title一样
  3. GET /movies/_search?q= title:2012&sort=year:asc&from=0&size=10
  4. #泛查询
  5. GET /movies/_search?q=2012&sort=year:asc&from=0&size=10

   2 、term与phrase查询

      alfred way 等效于 alfred OR way

"alfred way" 词语查询,phrase查询要求先后顺序


  1. # 查找美丽心灵, Mind为泛查询
  2. GET /movies/_search?q=title:Beautiful Mind
  3. {
  4. "profile":"true"
  5. }
  6. #使用引号,Phrase查询 同时满足 且位置一样
  7. GET /movies/_search?q=title:"Beautiful Mind"
  8. {
  9. "profile":"true"
  10. }

3、 Group分组指定,使用括号指定匹配的规则

(quick OR brown) AND fox

    status:(active OR pending) title:(full text search)

使用()表示分组 title:(full text search)  相当于 full or text or search


  1. #分组,Bool查询 只要包含 Beautiful或者 Mind就可以
  2. GET /movies/_search?q=title:(Beautiful Mind)
  3. {
  4. "profile":"true"
  5. }
  6. GET /movies/_search?q=title:(Beautiful AND Mind)
  7. {
  8. "profile":"true"
  9. }

 4、布尔操作符

         


  1. ##布尔操作符
  2. ## AND / OR / NOT 或者 && / || / ! 都必须大写
  3. #分组 + -
  4. # + 表示 must AND
  5. #- 表示 not must
  6. GET /movies/_search?q=title:(+Beautiful -Mind)
  7. #phrase查询
  8. GET /movies/_search?q=title:(Beautiful && Mind)
  9. {
  10. "profile":"true"
  11. }
  12. GET /movies/_search?q=title:(Beautiful OR Mind )
  13. {
  14. "profile":"true"
  15. }
  16. #存在Beautiful 且不包含 Mind
  17. GET /movies/_search?q=title:(Beautiful NOT Mind )
  18. {
  19. "profile":"true"
  20. }
  21. # 查找美丽心灵 或的关系,有beautiful或者有mind
  22. GET /movies/_search?q=title:(Beautiful %2B Mind)
  23. {
  24. "profile":"true"
  25. }

 5、范围查询,支持数值和日志

     1)区间写法,闭区间用[],开区间用{}


  1.  age: [1 TO 10]意为 1<=age<=10
  2. age: [1 TO 10}意为 1<=age<10
  3. age: [1 TO ]意为 age>=1
  4.  age: [* TO 10]意为 age<=10

2)算数符号写法

age:>=1

      age:(>=1&&<=10)或者age:(+>=1 +<=10)

6、 通配符查询代表一个字符,*代表0或多个字符       

name:t?m

    name:tom*

通配符匹配执行效率低,且占用较多内存,不建议使用

      如无特殊需求,不要将?/*放在最前面

7、正则表达式

      name:/[mb]oat/
8、模糊匹配 fuzzy query


  1. name:roam~1
  2. 匹配与roam差一个character的词,比如foam roams等

9、近似度查询 proximity search


  1. "fox quick"~5
  2. 以term为单位进行差异比较,比如"quick fox" "quick brown fox"都会被匹配

10 测试实例


  1. # 查找美丽心灵 或的关系,有beautiful或者有mind
  2. GET /movies/_search?q=title:(Beautiful %2B Mind)
  3. {
  4. "profile":"true"
  5. }
  6. #范围查询 ,区间写法 %7D表示}
  7. #闭区间[2002 TO 2018] 开区间{2002 TO 2018}
  8. #组合 {* TO 2018]
  9. #范围查询 ,区间写法
  10. GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018%7D
  11. {
  12. "profile":"true"
  13. }
  14. #下面如果不写 AND 表示or的查询关系
  15. GET /movies/_search?q=title:beautiful year:[2002 TO 2018]
  16. {
  17. "profile":"true"
  18. }
  19. ##运算符号
  20. ## year:(>2012 AND <=2018) year:(>2012) year:(->2012 +<=2018)
  21. GET /movies/_search?q=title:beautiful AND year:(->2012 +<=2018)
  22. {
  23. "profile":"true"
  24. }
  25. #通配符查询 *表示0个或者多个 ?代表1个字符
  26. GET /movies/_search?q=title:b*
  27. {
  28. "profile":"true"
  29. }
  30. #模糊匹配&近似度匹配 ~1 表示 beautifl 值出现一个错别字
  31. GET /movies/_search?q=title:beautifl~1
  32. {
  33. "profile":"true"
  34. }
  35. ##"Lord Rings"~2 表示 "Lord Rings" 之间允许出现两个单词
  36. #~3之间允许出现小于等于3个单词
  37. GET /movies/_search?q=title:"Lord Rings"~3
  38. {
  39. "profile":"true"
  40. }

Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)的更多相关文章

  1. Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板

    原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  2. Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer

    原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  3. Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD

    原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...

  4. Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍

    原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...

  5. Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)

    原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  6. CodeIgniter框架入门教程——第三课 URL及ajax

    本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...

  7. Git速成学习第三课:创建与合并分支

    本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...

  8. Python编程学习第三课之编程从Hello World开始

    在搞定了前几节课的情况下,大家是否有一种想要跃跃欲试的赶脚,接下来就是我们开始练手的实战时刻. 每个编程人员入门编程的第一课都是向我们马上要进入的编程世界问好,"你好,世界"英文说 ...

  9. Hbase学习(三)过滤器 java API

    Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...

随机推荐

  1. Python---面向对象---龟鱼游戏

    一.定义一个门票系统 门票的原价是100元 当周末的时候门票涨价20% 小孩子半票 计算2个成人和1个小孩的平日票价 ----------------------------------------- ...

  2. linux运维、架构之路-linux基础优化

    1.查看linux版本 cat /etc/redhat-release #CentOS release 6.9 (Final) ————>查看版本号 uname -m #x86_64 ————& ...

  3. k8s登录harbor报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cance

    [root@k8s-node02 ~]# docker login 192.168.180.105:1180 Username: admin Password: Error response from ...

  4. Distinctive Image Features from Scale-Invariant Keypoints(SIFT) 基于尺度不变关键点的特征描述子——2004年

    Abstract摘要本文提出了一种从图像中提取特征不变性的方法,该方法可用于在对象或场景的不同视图之间进行可靠的匹配(适用场景和任务).这些特征对图像的尺度和旋转不变性,并且在很大范围的仿射失真.3d ...

  5. SpringCloud 教程 (四) docker部署spring cloud项目

    一.docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...

  6. CG-CTF | 综合题2

    查源码发现一个文件读取:http://cms.nuptzj.cn/about.php?file=sm.txt,用它把能找到的php都读取下来 <?php if (!isset($_COOKIE[ ...

  7. spring-boot-devtools热加载不起作用

    在开发过程中,希望修改时能够及时更新修改,即热加载,但是spring-boot-devtools不起作用.这主要是两个原因导致. 一.spring-boot-maven-plugin插件没有配置,如下 ...

  8. Django项目执行时No Module Named ' ' 问题的解决情况

    出现这种问题的情况大致都是因为该模块未安装,使用 pip install xxx 进行安装,即可解决此类问题. 出现ModuleNotFoundError: No module named 'rest ...

  9. P4999烦(gui)人(chu)的数学作业

    P4399P4999 这是一道有着三倍经验的宝藏题目 我们可以求出来1到n中,1~9分别出现了几次,设f[i]为数字i出现的次数,则\(ans=\sum{f[i]\cdot i}\) 然后就是数位dp ...

  10. So the type system doesn’t feel so static.

    object wb{ def main(args:Array[String]){ println("Happy everyday!DATA-CENTER!") println(ne ...