原文: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. js的字符串是数字时过长的时候会被截断

    JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围:对于超过这个范围的整数, ...

  2. 解决webstorm卡顿问题,下面详细设置方法,使得webstorm快速打开

    具体办法: 找到WebStorm.exe.vmoptions这个文件,路径如下 webstorm安装主目录>bin>WebStorm.exe.vmoptions 更改为 第二行:-Xms1 ...

  3. JavaScript变量和字面量

    一.什么是变量? 首先了解一下什么是内存:内存就是保存程序在运行过程中,所需要用到的数据8bit(比特是表示信息的最小单位). 8bit=1byte 1024byte=1MB 1024MB=1GB 1 ...

  4. react native之封装离线缓存框架

    请求数据=>本地有无缓存+缓存数据是否过期 =>可用 =>不可用 将代码封装成一个DataStore.js文件, 这里面主要提供:从本地获取数据,从网络获取数据,创建本地时间戳,请求 ...

  5. 浙大PAT CCCC L3-015 球队“食物链” ( 搜索 && 剪枝 )

    题目链接 题意 : 有 n 个球队,给出主客场胜负图,找出一个序列 1.2.3..... 使得 1 战胜过 2 .2 战胜过 3.3 战胜过 4..... n 战胜过 1 ( 这个序列是 1~n 的其 ...

  6. jq刷新页面

    //页面加载时绑定按钮点击事件$(function(){    $("#按钮id").click(function(){        refresh();    });});// ...

  7. 老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)

    点击了解更多Python课程>>> 老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)大小:236G 此课程为老男孩全栈开发最新完结课程,适合零基 ...

  8. 使用 Markdown 写博客

    后台设置(左侧边栏区找到-设置默认编辑器). 设置为 Markdown 后保存,即可在编辑新博客时生效.

  9. Vim 编辑器学习笔记

    参考资料: 世界上最牛的编辑器: Vim 1

  10. Linux内核调试方法总结之Kprobes

    Kprobes [用途][参考kernel/Documentation/kprobes.txt帮助文档] Kprobes是一个轻量级内核调试工具,同时又是其他一些更高级的内核调试工具(如perf和sy ...