一、基本概念
这里说的Filter非Post filter,关于Post filter这里不做介绍,我们主要关注的是在执行一个评分查询前执行的Filter。
在讲述ES Filter的执行流程和缓存原理之前,有几个概念我们必须要清楚。
Query and Filter context
官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html
1. Query Context
所谓查询上下文,是指包含一个或多个查询条件的逻辑组合,QueryContext里包含的的单个查询表示的含义是“文档和该查询条件的匹配度有多大”,针对QueryContext里的每一个查询都会计算出一个_score来表示匹配度,整个QueryContext的匹配度评分等于其包含所有单个查询评分的总和,所以针对一个Query我们更多关注的是匹配度。
2.Filter Context
过滤器上下文和查询上下文类似,都是由1个或多个子查询(Query clause) 组成的。他们的区别在于Filter不会计算文档得分,它代表的含义是“文档和该查询条件是否匹配”,所以针对一个Filter我们更多关注的是能否可以过滤掉文档,返回的结果只能是可以或者不可以(true or false)。
二、基本查询
在写基本查询前我们先创建一个索引(my_store)和一个类型(products)并插入4条product数据
curl -XPUT http://localhost:9200/my_store
curl -XPOST http://localhost:9200/my_store/products/_mapping -d '
{
"products": {
"properties": {
"productID": {
"type