面试题答案
一键面试优先选择使用ElasticSearch的post_filter进行过滤的业务场景
- 分页场景:当需要对大量数据进行分页展示时,先通过query中的条件进行粗筛选获取符合基本条件的数据集,再使用post_filter对每一页数据进行二次过滤。例如电商商品搜索,在搜索电子产品时,通过query筛选出电子产品相关结果,post_filter在分页时可以针对每一页数据筛选特定品牌、价格区间等条件,这样能在保证搜索相关性的同时,灵活调整每一页展示数据的附加过滤条件。
- 分析场景:在进行数据分析时,如统计不同城市销售金额大于一定数值的订单数量。先通过query筛选出订单数据,然后用post_filter对城市和销售金额条件进行过滤,这样可以利用ElasticSearch的聚合功能,在符合订单数据整体条件基础上,灵活切换不同城市和金额条件来进行分析。
post_filter相较于query中的filter的优势
- 不影响相关性得分:query中的filter会直接影响文档与查询条件的相关性计算,而post_filter是在文档相关性计算完成之后执行的,不会改变文档的相关性得分。这使得在需要保留原始相关性排序的场景下,post_filter能更好地满足需求,比如在搜索商品时,先按照相关性展示商品,再通过post_filter对商品进行附加条件过滤,不会干扰商品基于原始搜索词的相关性排名。
- 灵活调整过滤条件:post_filter可以在不改变query主要逻辑的情况下灵活添加或修改过滤条件。例如在搜索新闻时,query用于匹配包含特定关键词的新闻,而post_filter可以根据用户实时需求(如特定日期范围、特定来源等)随时调整过滤条件,而不需要重新构建复杂的query逻辑。
- 性能优势(针对部分场景):在分页场景中,由于query中的filter会影响结果集的大小,每次改变filter条件都可能需要重新计算大量数据。而post_filter是在基本结果集确定后进行操作,在多次调整过滤条件时,能减少不必要的数据计算,提高性能。