es教程(二)
2019-11-26 本文已影响0人
睦月MTK
@snmutsuki
参考文档
适用于7.4版本!命令运行在powershell下
三、搜索
-
使用
match_all:{}
搜索全部文档,并依照account_number进行正向排序,默认只查前十条数据curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"match_all\" : {} }, \"sort\" : [ {\"account_number\" : \"asc\"} ] }'
-
结果解析
- took -- 查询操作的所花的时间(毫秒)
- timed_out -- 查询是否超时
- _shards -- 该查询在分片上的执行情况
- hits.max_score -- 查询出的文档中相关度最高的那个文档的_score
- hits.hits.sort -- 排序的字段的值,如果没指定,则由文档相关度_score排序
- hits.total.value -- 符合查询条件的文档的个数
-
使用
from
屏蔽前面多少条数据不输出,size
控制输出多少个curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"match_all\" : {} }, \"sort\" : [ {\"account_number\":\"asc\"} ], \"from\" : 20, \"size\" : 10 }'
-
使用
match
:{key:value}进行自定义查询,该查询匹配的是词curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"match\" : { \"address\" : \"mill lane\" } } }'
-
使用
match_phrase:{key:value}
进行完全匹配的查询curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"match_phrase\" : { \"address\" : \"mill lane\" } } }'
-
使用
bool:{must/should/must_not:[{key:value},...],...}
来进行多条件的复合查询,must表示一定要匹配的,should表示可以匹配的,must_not表示必定不匹配curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"bool\" : { \"must\" : [ { \"match\" : { \"age\" : 40 } } ], \"must_not\" : [ { \"match\" : { \"state\" : \"ID\" } } ] } } }'
- 使
filter
作为查询的过滤条件,如下表示选取balance在20000到30000之内的
curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"query\" : { \"bool\" : { \"filter\" : { \"range\" : { \"balance\" : { \"gte\" : 20000 , \"lte\" : 30000 } } } } } }'
- 使
四、归并(aggregation)操作
-
使用
aggs
来进行一个归并操作(即按照一定条件,由es帮你整合数据并返回你想要的结果),该例将会将文档按照state进行分组,并返回各个组下文档的数量,由于size为0,所以结果中的hits.hits是空的,仅有归并操作的结果。curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"size\" : 0 , \"aggs\" : { \"anyName\" : { \"terms\" : { \"field\" : \"state.keyword\" } } } }'
-
可以嵌套使用
aggs
来对归并的数据进行再次归并,如上面一步查出了每个州的账户数目,如果这次想继续查出每个州的账户的平均余额,则可以使用aggs
的嵌套和avg
的平均值计算操作。curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"size\" : 0 , \"aggs\" : { \"anyName_terms\" : { \"terms\" : { \"field\" : \"state.keyword\" }, \"aggs\" : { \"anyName_avg\" : { \"avg\" : { \"field\" : \"balance\" } } } } } }'
//...部分结果 "buckets" : [ { "key" : "TX", "doc_count" : 30, "anyName_avg" : { "value" : 26073.3 } }, //... ] //...
-
你更可以直接在
terms
操作内使用order
来进行基于嵌套归并查询结果的排序(即上述的账户平均值),而不是仅仅只可以对分组数量进行排序。curl.exe -X GET "localhost:9200/bank/_search?pretty" ` -H "Content-Type: application/json" ` -d ' { \"size\" : 0 , \"aggs\" : { \"anyName_terms\" : { \"terms\" : { \"field\" : \"state.keyword\" , \"order\" : { \"anyName_avg\" : \"desc\" } }, \"aggs\" : { \"anyName_avg\" : { \"avg\" : { \"field\" : \"balance\" } } } } } }'