查询语法
1、Query_string
1. 查询字段[spu_name]包含“手机”的数据
q
表示匹配查询
GET yo_spu/_search?q=spu_name:手机
2. 查询数据并分页(2条)
from
表示查询的行数(从0开始)size
表示要查询的数量
GET yo_spu/_search?from=0&size=2
3. 查询数据并以“价格”最低的开始排序
sort
表示排序,[asc|desc]
排序方式有升序降序
GET yo_spu/_search?sort=price:asc
4. 查询最便宜的,前5条,包含“手机”的数据
- 根据上面的条件组合查询
GET yo_spu/_search?q=spu_name:手机&sort=price:asc&size=5
2、Query DSL(基本搜索)
1. 查询所有数据(match_all
)
GET yo_spu/_search
{
"query": {
"match_all": {}
}
}
或
GET yo_spu/_search
相当于mysql的
select * from yo_spu
2. 查询字段[spu_name]包含“智能手机”的数据(match
)
GET yo_spu/_search
{
"query": {
"match": {
"spu_name": "智能手机"
}
}
}
相当于mysql的
select * from yo_spu
where spu_name like '%智能%'
or spu_name like '%手机%'
or spu_name like '%智能手机%'
3. 查询多字段[spu_name,shop_name]字段包含“智能手机”的数据并价格由高到底(multi_match
、order
)
query
表示查询操作query.multi_match
表示可以匹配多字段query.multi_match.query
表示查询条件query.multi_match.fields
表示要匹配的字段sort
表示排序操作sort.price
price是需要排序的字段
GET yo_spu/_search
{
"query": {
"multi_match": {
"query": "智能手机",
"fields": ["spu_anme", "shop_name"]
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
相当于mysql的
select * from yo_spu
where
spu_name like '%智能%'
or spu_name like '%手机%'
or spu_name like '%智能手机%'
or shop_name like '%智能%'
or shop_name like '%手机%'
or shop_name like '%智能手机%'
order by price desc
4. 返回指定字段(_source
)
_source
表示要返回的数据源
GET yo_spu/_search
{
"query": {
"match_all": {}
}
"_source": ["spu_name","shop_name"]
}
相当于mysql的
select spu_name, shop_name from yo_spu
5. 分页查询前20条数据(from
、size
)
GET yo_spu/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 20
}
相当于mysql的
select * from yo_spu limit 0, 20
3、*
Full-text queries(全文检索)
1. 查询字段[spu_name]包含“智能手机”的数据(term
)
query.term
表示[“智能手机”]不会被分词
GET yo_spu/_search
{
"query": {
"term": {
"spu_name": "智能手机"
}
}
}
相当于mysql的
select * from yo_spu where spu_name like '%智能手机%'
2. 查询字段[spu_name]包含“智能”或“手机”的数据(terms
)
terms
搜索的内容不会被分词match
搜索的内容会被分词为 [智能]、[手机]两个词
GET yo_spu/_search
{
"query": {
"terms": {
"spu_name": ["智能", "手机"]
}
}
}
同
GET yo_spu/_search
{
"query": {
"match": {
"spu_name": "智能手机"
}
}
}
相当于mysql的
select * from yo_spu
where spu_name like '%智能%' or spu_name like '%手机%'
4、查询和过滤
bool: 可以组合多个查询条件,相关的如下
must
: 必须满足,类似mysql的and
filter
:过滤器(不计算分数)should
: 可能满足,类似mysql的or
must_not
: 必须不满足(不计算分数),和must
相反