对搜索出来的结果进行数据过滤。不会到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
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

