赞
踩
之前忽略了在搜索返回结果中的hits._score
和max_score
参数,其实都是指文档与指定的搜索查询匹配程度的相对度量,score
越高,匹配度越高。但查询并不总是需要产生分数,特别是当它们仅用于“过滤”文档集时,Elasticsearch会检测这些情况并自动优化查询执行,以便不计算无用的分数。bool
搜索和range
搜索都支持过滤操作,如(在bool
内部):
// 过滤得到20000<=balance<=30000的文档 GET /bank/_search { "query": { "bool": { "must": { "match_all": { } }, "filter": { "range": { "balance": { "gte": 20000, "lte": 30000 } } } } } }
聚合提供了数据分组和统计的功能(可以像SQL中group by
那样去理解),在Elasticsearch中,执行搜索后返回结果时,在这个返回结果中将聚合结果与命中结果(就是实际返回hits
)分开(即分为搜索命中结果和聚合结果)。可以运行查询和多个聚合,并一次性获取两个(或任一个)操作的结果,从而避免使用简洁的API进行网络往返所耗费的时间。
下面是一个按用户所在的州state
为聚合的操作条件:
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
}
}
}
}
上述aggs
就是用来指定聚合条件的,这里为了便于观察聚合结果,直接让返回的命中结果中具体结果数组显示0个"size": 0
,聚合结果也是默认显示top10,最终的结果为:
{ "took": 0, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1000, "max_score": 0, // 这边数组直接显示0个 "hits": [] },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。