Elasticsearch(5) --- Query查询和Filter查询
这篇博客主要分为 :Query查询
和Filter查询
。有关复合查询、聚合查询也会单独写篇博客。
一、概念
1、概念
一个查询语句究竟具有什么样的行为和得到什么结果,主要取决于它到底是处Query
还是Filter
。两者有很大区别,我们来看下:
Query context 查询上下文
这种语句在执行时既要计算文档是否匹配,还要计算文档相对于其他文档的匹配度有多高,匹配度越高,_score
分数就越高
Filter context 过滤上下文
过滤上下文中的语句在执行时只关心文档是否和查询匹配,不会计算匹配度,也就是得分。
看下官方的例子
GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } }
对上面的例子分析下:
query
参数表示整个语句是处于 query context 中bool
和match
语句被用在 query context 中,也就是说它们会计算每个文档的匹配度(_score)filter
参数则表示这个子查询处于 filter context 中filter
语句中的term
和range
语句用在 filter context 中,它们只起到过滤的作用,并不会计算文档的得分。
2、查询数据准备
1)创建索引
PUT student { "settings":{ "number_of_shards":1, "number_of_replicas":1 }, "mappings":{ "properties":{ "name":{"type":