④. 词条匹配term、terms查询
- ①. 全文检索字段用match,其他非text字段匹配用term。
- ②. term查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串
#term GET sku/_search { "query": { "term":{ "price":1000 } } }
③. terms查询和term查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件
GET sku/_search { "query": { "terms":{ "price":[1000,2000,3000] } } }
⑤. aggs聚合查询
①. 聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于SQL Group by和SQL聚合函数。
②. 在elasticsearch中,执行搜索返回this(命中结果),并且同时返回聚合结果,把以响应中的所有hits(命中结果)分隔开的能力。这是非常强大且有效的,你可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用一次简洁和简化的API啦避免网络往返。
③. aggs:执行聚合。聚合语法如下:
terms:看值的可能性分布,会合并锁查字段,给出计数即可
avg:看值的分布平均
"aggs":{ # 聚合 "aggs_name":{ # 这次聚合的名字,方便展示在结果集中 "AGG_TYPE":{} # 聚合的类型(avg,term,terms) } }
④. 例:搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情
# 分别为包含mill、,平均年龄、 GET bank/_search { "query": { # 查询出包含mill的 "match": { "address": "Mill" } }, "aggs": { #基于查询聚合 "ageAgg": { # 聚合的名字,随便起 "terms": { # 看值的可能性分布 "field": "age", "size": 10 } }, "ageAvg": { "avg": { # 看age值的平均 "field": "age" } }, "balanceAvg": { "avg": { # 看balance的平均 "field": "balance" } } }, "size": 0 # 不看详情 } 结果: { "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4, // 命中4条 "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "ageAgg" : { // 第一个聚合的结果 "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : 38, # age为38的有2条 "doc_count" : 2 }, { "key" : 28, "doc_count" : 1 }, { "key" : 32, "doc_count" : 1 } ] }, "ageAvg" : { // 第二个聚合的结果 "value" : 34.0 # balance字段的平均值是34 }, "balanceAvg" : { "value" : 25208.0 } } }