ES—查询
【前言】
由于ES是将词条存储在倒排索引中,所以能够很快实现查询,为什么不用正排索引,请看之前的文章 点这里
一、URI Search
简易方式,可临时使用,不适合构建复杂查询
二、Query DSL (Domain Specific Language)
- 叶查询语句
- match查询
- term查询
- range查询
- 复合查询子句
- 可以包含叶子查询或者其他复杂查询语句
- bool查询
1.match_all:返回所有文档
GET stu/_search
{
"query": {
"match_all": {}
}
}
2.match:bool类型查询
【分词结果为john和kerry两个单词,只要name字段值中包含有其中任意一个,那么返回该文档】
GET stu/_search
{
"query": {
"match": {
"name":"John Kerry"
}
}
}
3.match_phrase:短语匹配查询
【分词结果为john和kerry两个单词,如果name字段值中依次包含所有分词,那么返回该文档】
GET stu/_search
{
"query": {
"match_phrase": {
"name":"John Kerry"
}
}
}
4.match_phrase_prefix:前缀匹配查询
【查询是否前缀是XX的文档】
GET stu/_search
{
"query": {
"match_phrase_prefix": {
"name":"John Ke"
}
}
}
5.multi_match:多字段匹配查询
【查询满足多个字段】
GET stu/_search
{
"query": {
"multi_match": {
"query": "John like cooking",
"fields": ["name","interest"]
}
}
}
6.term:词条查询
【根据相应的词条查询】
GET stu/_search
{
"query": {
"term":{
"name":"john"
}
}
}
7.terms:多词条查询
【根据多个词条查询,注意和term区别】
GET stu/_search
{
"query": {
"terms":{
"name":["john","da"]
}
}
}
8.range:范围查询
【类似于between…and…,但是它的效率很高,由于是B+树作为存储,所有会减少大量无用查询】
GET stu/_search
{
"query": {
"range" : {
"yearOfBorn" : {
"gte" : 1995,
"lte" : 2000
}
}
}
}
9.bool:布尔查询
【查询喜欢cooking,但是不在1995和2000之间出生的文档】
GET stu/_search
{
"query": {
"bool": {
"must": {
"match": { "interest": "cooking"} },
"must_not": {
"range": { "yearOfBorn": { "gte": 1995, "lte": 2000 }}}
}
}
}
【注意:must 和 must not】
三、分页
1.from+size:浅分页
【取出前 5页】
GET stu/_search
{
"query": {
"match_all": {}
},
"size": 5,
"from": 0
}
2.scroll:深分页
【返回scroll_id与第一页内容,scroll_id 5分钟有效】
GET stu/_search?scroll=5m
{
"from": 0,
"size": 5,
"query": {"match_all": {}}
}