DSL 其实是 Domain Specific Language 的缩写,中文翻译为领域特定语言(下简称 DSL)
为了解决某一类任务而专门设计的计算机语言。
POST _bulk {"create":{"_index":"my_index","_id":1}} {"id":1,"title":"华为笔记本电脑","category":"华为","images":"http://www.gulixueyuan.com/xm.jpg","price":5388} {"create":{"_index":"my_index","_id":2}} {"id":2,"title":"华为手机","category":"华为","images":"http://www.gulixueyuan.com/xm.jpg","price":5500} {"create":{"_index":"my_index","_id":3}} {"id":3,"title":"VIVO手机","category":"vivo","images":"http://www.gulixueyuan.com/xm.jpg","price":3600} #查询所有
查询所有文档
match_all:
请求 /索引/_search{ "query": { "match_all": {}}}
POST /my_index/_search { "query": { } }
匹配查询
match : 匹配查询match支持分词的
POST /my_index/_search { "query": { "match": { "title": "华为智能手机" } } }
补充条件删除
#补充条件删除 POST /my_index/_delete_by_query { "query": { "match": { "title": "vivo" } } }
多字段匹配
multi_match
满足使用 match 在多个字段中进行查询的需求
#多字段匹配 POST /my_index/_search { "query": { "multi_match": { "query": "华为手机", "fields": ["title","category"] } } }
前缀匹配
prefix
根据前缀去查询
#前缀匹配 POST /my_index/_search { "query": { "prefix": { "title": { "value": "vivo智能" } } } }
关键字精确查询 和 多关键字精确查询
term:关键字不会进行分词。
#关键字精确查询 POST /my_index/_search { "query": { "term": { "title": { "value": "华为智能手机" } } } }
#多关键字 POST /my_index/_search { "query": { "terms": { "title": [ "华为", "华为手机" ] } } }
范围查询
范围查询使用range。
gte: 大于等于
lte: 小于等于
gt: 大于
lt: 小于
POST /my_index/_search { "query": { "range": { "price": { "gte": 3000, "lte": 6000 } } } } POST /my_index/_search { "query": { "range": { "price": { "gt": 5000, "lt": 6000 } } } } 指定返回字段
query同级增加_source进行过滤。
POST /my_index/_search { "query": { "terms": { "title": [ "华为手机", "华为" ] } }, "_source": ["title","category"] }
组合查询
bool 各条件之间有and,or或not的关系
must: 各个条件都必须满足,所有条件是and的关系
should: 各个条件有一个满足即可,即各条件是or的关系
must_not: 不满足所有条件,即各条件是not的关系
filter: 与must效果等同,但是它不计算得分,效率更高点。
# 组合查询 #must : 各个条件都必须满足,不然就是空 POST /my_index/_search { "query": { "bool": { "must": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 3000, "lte": 6000 } } } ] } } } #should: 各个条件有一个满足即可,即各条件是or的关系 POST /my_index/_search { "query": { "bool": { "should": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 1000, "lte": 600 } } } ] } } } #must_not: 不满足所有条件,即各条件是not的关系 POST /my_index/_search { "query": { "bool": { "must_not": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 1000, "lte": 6000 } } } ] } } } #filter: 与must效果等同,但是它不计算得分,效率更高点。 #_score的分值为0 POST /my_index/_search { "query": { "bool": { "filter": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 3000, "lte": 6000 } } } ] } } } #如果should和must同时存在,他们之间是and关系: POST /my_index/_search { "query": { "bool": { "should": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 3000, "lte": 6000 } } } ], "must": [ { "match": { "title": "华为" } }, { "range": { "price": { "gte": 3000, "lte": 6000 } } } ] } } }
聚合查询
聚合允许使用者对es文档进行统计分析,类似与关系型数据库中的group by,当然还有很多其他的聚合,例如取最大值、平均值等等。
#聚合查询
#metric:对一个数据分组执行的统计,好比计算最大值,最小值,平均值等
#bucket数据分组,一些数据按照某个字段进行bucket划分,这个字段值相同的数
#一个bucket中
#max:最大值
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 20,
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
}
}
#min:最小值
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"min_price": {
"min": {
"field": "price"
}
}
}
}
#avg:求平均数
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 1,
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
#sum:总和
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"sum_price": {
"sum": {
"field": "price"
}
}
}
}
#stats:统计数据
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"stats_price": {
"stats": {
"field": "price"
}
}
}
}
#terms:高亮查询 只要有被提供的字段值(未被分析)被文档匹配,该文档将
#被此terms询匹配。
POST /my_index/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"groupby_category": {
"terms": {
"field": "category",
"size": 10
}
}
}
}