elasticsearch API

Search API(URI)

GET /_search #查询所有索引文档
GET /my_index/_search #查询指定索引文档
GET /my_index1,my_index2/search #多索引查询
GET /my
*/_search
2019-03-xxx
2019-04-vvv
2019-05-xxx

URI查询方式(查询有限制,很多配置不能实现)

GET /my_index/_search?q=user:alfred #指定字段查询

GET /my_index/_search?q=keyword&df=user&sort=age:asc&from=4&size=10&timeout=1s

q : 指定查询的语句,例如q=aa或q=user:aa
df:q中不指定字段默认查询的字段,如果不指定,es会查询所有字段
Sort:排序,asc升序,desc降序
timeout:指定超时时间,默认不超时
from,size:用于分页

term与phrase

term相当于单词查询,phrase相当于词语查询
term:Alfred way等效于alfred or way
phrase:”Alfred way” 词语查询,要求先后顺序

泛查询

Alfred等效于在所有字段去匹配该term(不指定字段查询)

指定字段

name:alfred

Group分组设定(),使用括号指定匹配的规则

(quick OR brown)AND fox:通过括号指定匹配的优先级
status:(active OR pending) title:(full text search):把关键词当成一个整体

查询案例及详解

1、批量创建文档

POST test_search_index/doc/_bulk
{
  "index":{
    "_id":1
  }
}
{
  "username":"alfred way",
  "job":"java engineer",
  "age":18,
  "birth":"1991-12-15",
  "isMarried":false
}
{
  "index":{
    "_id":2
  }
}
{
  "username":"alfred",
  "job":"java senior engineer and java specialist",
  "age":28,
  "birth":"1980-05-07",
  "isMarried":true
}
{
  "index":{
    "_id":3
  }
}
{
  "username":"lee",
  "job":"java and ruby engineer",
  "age":22,
  "birth":"1985-08-07",
  "isMarried":false
}
{
  "index":{
    "_id":4
  }
}
{
  "username":"lee junior way",
  "job":"ruby engineer",
  "age":23,
  "birth":"1986-08-07",
  "isMarried":false
}

2、泛查询

GET test_search_index/_search?q=alfred

3、查询语句执行计划查看

GET test_search_index/_search?q=alfred
{
  "profile":true
}

4、term查询

GET test_search_index/_search?q=username:alfred way		#alfred OR way

5、phrase查询

GET test_search_index/_search?q=username:"alfred way"

6、group查询

GET test_search_index/_search?q=username:(alfred OR way)

7、布尔操作符

(1)AND(&&),OR(||),NOT(!)
例如:name:(tom NOT lee)
#表示name字段中可以包含tom但一定不包含lee
(2)+、-分别对应must和must_not
例如:name:(tom +lee -alfred)
#表示name字段中,一定包含lee,一定不包含alfred,可以包含tom
注意:+在url中会被解析成空格,要使用encode后的结果才可以,为%2B

GET test_search_index/_search?q=username:(alfred %2Bway)

范围查询,支持数值和日期

1、区间:闭区间:[],开区间:{}
age:[1 TO 10] #1<=age<=10
age:[1 TO 10} #1<=age<10
age:[1 TO ] #1<=age
age:[
TO 10] #age<=10
*

2、算术符号写法
age:>=1
age:(>=1&&<=10)或者age:(+>=1 +<=10)

通配符查询

?:1个字符
:0或多个字符
例如:name:t?m
name:tom

name:t*m
注意:通配符匹配执行效率低,且占用较多内存,不建议使用,如无特殊要求,不要讲?/*放在最前面

正则表达式

name:/[mb]oat/

模糊匹配fuzzy query

name:roam~1 [0,1,2]
匹配与roam差1个character的词,比如foam、roams等

近似度查询proximity search

“fox quick”~5
以term为单位进行差异比较,比如”quick fox” “quick brown fox”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值