首页新闻动态正文

检索和过滤的区别 (query vs. filter)【黑马大数据培训】

更新时间:2022年12月21日 18时25分27秒 来源:黑马程序员论坛

黑马中级程序员课程

1 filter与query示例1.1 准备测试数据PUT website/_doc/1{    "title": "小白学ES01",    "desc": "the first blog about es",    "level": 1,     "post_date": "2018-10-10",    "post_address": {        "country": "China",        "province": "GuangDong",        "city": "GuangZhou"    }}PUT website/_doc/2{    "title": "小白学ES02",    "desc": "the second blog about es",    "level": 3,    "post_date": "2018-11-11",    "post_address": {        "country": "China",        "province": "ZheJiang",        "city": "HangZhou"    }}1.2 搜索测试
搜索条件: 搜索博客等级(level)大于等于2, 同时发布日期(post_date)是2018-11-11的博客:
(1) 不使用filter:
GET website/_doc/_search{    "query": {        "bool": {            "must": [                { "match": { "post_date": "2018-11-11" } },                 { "range": { "level": { "gte": 2 } } }            ]        }    }}// 结果信息: "hits": {    "total": 1,    "max_score": 2.0,    "hits": [        {            "_index": "website2",            "_type": "blog",            "_id": "2",            "_score": 2.0,          // 评分为2.0            "_source": {                "title": "小白学ES02",                "desc": "the second blog about es",                "level": 3,                "post_date": "2018-11-11",                "post_address": {                    "country": "China",                    "province": "ZheJiang",                    "city": "HangZhou"                }            }        }    ]}
(2) 使用filter:
GET website/_doc/_search{    "query": {        "bool": {            "must": {                 "match": { "post_date": "2018-11-11" }            },             "filter": {                "range": { "level": { "gte": 2 } }            }        }    }}// 结果信息: "hits": {    "total": 1,    "max_score": 1.0,    "hits": [        {            "_index": "website2",            "_type": "blog",            "_id": "2",            "_score": 1.0,      // 评分为1.0            "_source": {                "title": "小白学ES02",                "desc": "the second blog about es",                "level": 3,                "post_date": "2018-11-11",                "post_address": {                    "country": "China",                    "province": "ZheJiang",                    "city": "HangZhou"                }            }        }    ]}2 filter与query的区别
filter和query一起使用时, 会先执行filter.
2.1 相关度处理上的不同
filter —— 只根据搜索条件过滤出符合的文档, 将这些文档的评分固定为1, 忽略TF/IDF信息, 不计算相关度分数; query —— 先查询符合搜索条件的文档, 然后计算每个文档对于搜索条件的相关度分数, 再根据评分倒序排序.
建议:
如果对搜索结果有排序的要求, 要将最匹配的文档排在最前面, 就用query;如果只是根据一定的条件筛选出部分数据, 不关注结果的排序, 就用filter. 2.2 性能上的对比
filter 性能更好, 无排序 —— 不计算相关度分数, 不用根据相关度分数进行排序, 同时ES内部还会缓存(cache)比较常用的filter的数据 (使用bitset <0或1> 来记录包含与否).
query 性能较差, 有排序 —— 要计算相关度分数, 要根据相关度分数进行排序, 并且没有cache功能.
2.3 对比结论
1) 业务关心的、需要根据匹配的相关度进行排序的搜索条件 放在 query 中;
2) 业务不关心、不需要根据匹配的相关度进行排序的搜索条件 放在 filter 中.
出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)

推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 软件测试培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


分享到:
在线咨询 我要报名
和我们在线交谈!