原文: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. mongodb replica set搭建

    1/安装mongodb 配置repo: [mongodb-org-3.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/red ...

  2. 使用Hybris Commerce User API读取用户信息时,电话字段没有返回

    在使用Hybris Commerce User API读取一个user信息时,我遇到一个问题,在API返回的结构里没有包含期望看到的Phone字段. 仔细观察Swagger里对response结构的说 ...

  3. Java——动态绑定和多态

    动态绑定是在执行期间(而不是编译期间)判断所用对象的实际类型,根据其实际的类型调用其相应的方法(确定选择哪个多态形式被调用). 首先是方法的参数是父类对象,传入子类对象是否可行 然后引出Parent ...

  4. 判断div里面的子集是否含有特定的类

    if($('#BankCardId .card').length){ alert("请绑定银行卡"); } if ($('#user-20130011 #age-20130011' ...

  5. 嵌入式逻辑分析仪SignalTap II 设计范例

    Crazy Bingo :嵌入式逻辑分析仪SignalTap II 设计范例 例程下载地址  http://www.cnblogs.com/crazybingo/archive/2011/07/26/ ...

  6. (26)Python获取某个文件存放的相对路径(更改任意目录下保持不变)

    import os import platform def getSeparator(): ''' 获取不同平台下的斜杠符号 :return: Created by Wu Yongcong 2017- ...

  7. [CSP-S模拟测试]:飘雪圣域(莫队)

    题目描述 $IcePrincess\text{_}1968$和$IcePrince\text{_}1968$长大了,他们开始协助国王$IceKing\text{_}1968$管理国内事物. $IceP ...

  8. HTML To Word

    一.源码特点       1.在一些实际的应用场景中,有用户需要将一批规范的资料网页保存为WORD文档以便离线传阅或用于其它需求.在此之前,使用了OFFICE组件来尝试完成此功能需求,但是效果都不尽如 ...

  9. Extending Widgets with the Widget Factory

    https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/ 实例 https://github.com/tkvw/jQue ...

  10. Junit单元测试的使用

    这里拿Dynamic Web Project项目来演示,首先创建一个Dynamic Web Project项目,起名,点next, 继续点next, 将web.xml文件勾选,finish, 接下来在 ...