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

   

将查询语句通过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"
}

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值