查询语法
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.priceprice是需要排序的字段
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的andfilter:过滤器(不计算分数)should: 可能满足,类似mysql的ormust_not: 必须不满足(不计算分数),和must相反