DSL:elasticsearch查询语言 elasticsearch对json 的语法有严格的要求,每个json串不能换行,同时一个json串和一个json串之间,必须有一个换行
DSL(介绍查询语言)
下面示例省略了HTTP请求GET /bank/_search
- 查询所有,按age升序
{
"query": { "match_all": {} }, "sort": { "age": "asc" }, "from": 10, "size": 10}match_all :部分简单指定了我们想去执行的查询类型,意思就是在索引中搜索所有的文档。
sort:指定搜索结果的顺序size:指定返回的结果数量,size没有指定,它默认为10from:(从0开始)指定了从哪个文档索引开始- match 查询
基本的属性搜索查询(就是通过特定的一个或多个属性来搜索),没有知道哪个索引,全文搜索
查询age为15的文档,且只返回name和age信息
{ "query":{ "match" : { "age":"15" } }, "_source": ["name", "age"]}
name字段包含小明或者小东的数据
{ "query": { "match": { "name": "小明 小东" } }}
name必须包含小和明的文档数据
{ "query": { "match_phrase": { "name": "小 明" } }}
- bool查询
所有addree必须包含mill和lane
{ "query": { "bool": { "must": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } }}
所有address属性中包含 “mill” 或 “lane” 的账户文档
{ "query": { "bool": { "should": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } }}
age属性为40,并且state属性不为2
{ "query": { "bool": { "must": [ { "match": { "age": "40" } } ], "must_not": [ { "match": { "state": "2" } } ] } }}
- 过滤
查询年龄大于20小于25的学生
curl -XGET 'localhost:9200/students/_search?pretty' -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": { "match_all": {} }, "filter": { "range": { "age": { "gte": 20, "lte": 25 } } } } }}'
聚合
聚合可以分组并统计数据,类似SQL的GROUP BY操作和SQL的聚合函数;同时聚合可以嵌套
可以返回搜索结果和聚合结果
统计每个年龄断的人数
curl -XGET 'localhost:9200/students/_search?' { "size": 0,#返回0条搜索结果,只返回聚合结果 "aggs": { "group_by_state": { "terms": { "field": "age" } } }}
搜索最小年龄
{ "size": 0, "aggs" : { "min_fees" : { "min" : { "field" : "age" } } }}
返回的结果:
{ "took": 8, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, "max_score": 0, "hits": [] }, "aggregations": { "min_fees": { "value": 12 } }}
求年龄总和
{ "aggs" : { "total_fees" : { "sum" : { "field" : "age" } } }}