对搜索出来的结果进行数据过滤。不会到es库里去搜,不会去计算文档的相关度分数,所以过滤的性能会比较高,过滤器可以和全文搜索结合在一起使用。
post_filter元素是一个顶层元素,只会对搜索结果进行过滤。不会计算数据的匹配度相关性分数,不会根据分数去排序,query则相反,会计算分数,也会按照分数去排序。

 

使用场景:

  • query:根据用户搜索条件检索匹配记录
  • post_filter:用于查询后,对结果数据的筛选

实操:查询账户金额大于5000元,小于8000元的用户。并且生日在1998-07-14的用户

  • gte:大于等于
  • lte:小于等于
  • gt:大于
  • lt:小于
    (除此以外还能做其他的match等操作也行)
POST    http://10.0.0.220:9200/shop/_doc/_search

{
	"query":{
		"match":{
			"desc":"我男人"
		}
	},
	"post_filter":{
		"range":{
			"money":{
				"gt":5000,
                "lt":8000
			}
		}
	}
}



不仅如此,我们还可以通过post_filter,对字符串进行过滤:

POST    http://10.0.0.220:9200/shop/_doc/_search

{
	"query":{
		"match":{
			"desc":"我男人"
		}
	},
	"post_filter":{
		"term":{
			"birthday":"1995-11-08"
		}
	}
}

最后修改于 2020-04-07 16:09:21
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇