标签:search title GET URI 查询 movies 第三课 true
原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)
实现对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:用于分页
- ##指定字段查询和 ?q=2012&df=title一样
- 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
泛查询 全字段查询 不字段字段
- ## 泛查询 和 指定字段查询
- ##指定字段查询和 ?q=2012&df=title一样
- GET /movies/_search?q= title:2012&sort=year:asc&from=0&size=10
- #泛查询
- GET /movies/_search?q=2012&sort=year:asc&from=0&size=10
2 、term与phrase查询
alfred way 等效于 alfred OR way
"alfred way" 词语查询,phrase查询要求先后顺序
- # 查找美丽心灵, Mind为泛查询
- GET /movies/_search?q=title:Beautiful Mind
- {
- "profile":"true"
- }
-
- #使用引号,Phrase查询 同时满足 且位置一样
- GET /movies/_search?q=title:"Beautiful Mind"
- {
- "profile":"true"
- }
3、 Group分组指定
,使用括号指定匹配的规则
(quick OR brown) AND fox
status:(active OR pending) title:(full text search)
使用()表示分组 title:(full text search) 相当于 full or text or search
- #分组,Bool查询 只要包含 Beautiful或者 Mind就可以
- GET /movies/_search?q=title:(Beautiful Mind)
- {
- "profile":"true"
- }
-
- GET /movies/_search?q=title:(Beautiful AND Mind)
- {
- "profile":"true"
- }
4、布尔操作符
- ##布尔操作符
- ## AND / OR / NOT 或者 && / || / ! 都必须大写
- #分组 + -
- # + 表示 must AND
- #- 表示 not must
- GET /movies/_search?q=title:(+Beautiful -Mind)
-
- #phrase查询
- GET /movies/_search?q=title:(Beautiful && Mind)
- {
- "profile":"true"
- }
- GET /movies/_search?q=title:(Beautiful OR Mind )
- {
- "profile":"true"
- }
- #存在Beautiful 且不包含 Mind
- GET /movies/_search?q=title:(Beautiful NOT Mind )
- {
- "profile":"true"
- }
-
- # 查找美丽心灵 或的关系,有beautiful或者有mind
- GET /movies/_search?q=title:(Beautiful %2B Mind)
- {
- "profile":"true"
- }
5、范围查询
,支持数值和日志
1)区间写法,闭区间用[],开区间用{}
- age: [1 TO 10]意为 1<=age<=10
- age: [1 TO 10}意为 1<=age<10
- age: [1 TO ]意为 age>=1
- 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
- name:roam~1
- 匹配与roam差一个character的词,比如foam roams等
9、近似度查询 proximity search
- "fox quick"~5
- 以term为单位进行差异比较,比如"quick fox" "quick brown fox"都会被匹配
10 测试实例
- # 查找美丽心灵 或的关系,有beautiful或者有mind
- GET /movies/_search?q=title:(Beautiful %2B Mind)
- {
- "profile":"true"
- }
-
- #范围查询 ,区间写法 %7D表示}
- #闭区间[2002 TO 2018] 开区间{2002 TO 2018}
- #组合 {* TO 2018]
-
- #范围查询 ,区间写法
- GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018%7D
- {
- "profile":"true"
- }
-
-
- #下面如果不写 AND 表示or的查询关系
- GET /movies/_search?q=title:beautiful year:[2002 TO 2018]
- {
- "profile":"true"
- }
-
- ##运算符号
- ## year:(>2012 AND <=2018) year:(>2012) year:(->2012 +<=2018)
- GET /movies/_search?q=title:beautiful AND year:(->2012 +<=2018)
- {
- "profile":"true"
- }
-
- #通配符查询 *表示0个或者多个 ?代表1个字符
- GET /movies/_search?q=title:b*
- {
- "profile":"true"
- }
-
- #模糊匹配&近似度匹配 ~1 表示 beautifl 值出现一个错别字
- GET /movies/_search?q=title:beautifl~1
- {
- "profile":"true"
- }
- ##"Lord Rings"~2 表示 "Lord Rings" 之间允许出现两个单词
- #~3之间允许出现小于等于3个单词
- GET /movies/_search?q=title:"Lord Rings"~3
- {
- "profile":"true"
- }
标签:search,title,GET,URI,查询,movies,第三课,true 来源: https://www.cnblogs.com/lonelyxmas/p/11612416.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。