03_结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)

2023-05-16

课程大纲

(1)在倒排索引中查找搜索串,获取document list

date来举例

word        doc1        doc2        doc3

2017-01-01    *        *
2017-02-02            *        *
2017-03-03    *        *        *

filter:2017-02-02

到倒排索引中一找,发现2017-02-02对应的document list是doc2,doc3

(2)为每个在倒排索引中搜索到的结果,构建一个bitset,[0, 0, 0, 1, 0, 1]

非常重要

使用找到的doc list,构建一个bitset,就是一个二进制的数组,数组每个元素都是0或1,用来标识一个doc对一个filter条件是否匹配,如果匹配就是1,不匹配就是0

[0, 1, 1]

doc1:不匹配这个filter的
doc2和do3:是匹配这个filter的

尽可能用简单的数据结构去实现复杂的功能,可以节省内存空间,提升性能

(3)遍历每个过滤条件对应的bitset,优先从最稀疏的开始搜索,查找满足所有条件的document

后面会讲解,一次性其实可以在一个search请求中,发出多个filter条件,每个filter条件都会对应一个bitset
遍历每个filter条件对应的bitset,先从最稀疏的开始遍历

[0, 0, 0, 1, 0, 0]:比较稀疏
[0, 1, 0, 1, 0, 1]

先遍历比较稀疏的bitset,就可以先过滤掉尽可能多的数据

遍历所有的bitset,找到匹配所有filter条件的doc

请求:filter,postDate=2017-01-01,userID=1

postDate: [0, 0, 1, 1, 0, 0]
userID:   [0, 1, 0, 1, 0, 1]

遍历完两个bitset之后,找到的匹配所有条件的doc,就是doc4

就可以将document作为结果返回给client了

(4)caching bitset,跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小segment(<1000,或<3%),不缓存bitset。

比如postDate=2017-01-01,[0, 0, 1, 1, 0, 0],可以缓存在内存中,这样下次如果再有这个条件过来的时候,就不用重新扫描倒排索引,反复生成bitset,可以大幅度提升性能。

在最近的256个filter中,有某个filter超过了一定的次数,次数不固定,就会自动缓存这个filter对应的bitset

segment(上半季),filter针对小segment获取到的结果,可以不缓存,segment记录数<1000,或者segment大小<index总大小的3%

segment数据量很小,此时哪怕是扫描也很快;segment会在后台自动合并,小segment很快就会跟其他小segment合并成大segment,此时就缓存也没有什么意义,segment很快就消失了

针对一个小segment的bitset,[0, 0, 1, 0]

filter比query的好处就在于会caching,但是之前不知道caching的是什么东西,实际上并不是一个filter返回的完整的doc list数据结果。而是filter bitset缓存起来。下次不用扫描倒排索引了。

(5)filter大部分情况下来说,在query之前执行,先尽量过滤掉尽可能多的数据

query:是会计算doc对搜索条件的relevance score,还会根据这个score去排序
filter:只是简单过滤出想要的数据,不计算relevance score,也不排序

(6)如果document有新增或修改,那么cached bitset会被自动更新

postDate=2017-01-01,[0, 0, 1, 0]
document,id=5,postDate=2017-01-01,会自动更新到postDate=2017-01-01这个filter的bitset中,全自动,缓存会自动更新。postDate=2017-01-01的bitset,[0, 0, 1, 0, 1]
document,id=1,postDate=2016-12-30,修改为postDate-2017-01-01,此时也会自动更新bitset,[1, 0, 1, 0, 1]

(7)以后只要是有相同的filter条件的,会直接来使用这个过滤条件对应的cached bitset

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

03_结构化搜索_filter执行原理深度剖析(bitset机制与caching机制) 的相关文章

  • 递归-角谷定理

    问题描述 xff1a 角谷定理 输入一个自然数 xff0c 若为偶数 xff0c 则把它除以2 xff0c 若为奇数 xff0c 则把它乘以3加1 经过如此有限次运算后 xff0c 总可以得到自然数值1 求经过多少次可得到自然数1 如 xf
  • iOS之自定义导航按钮UIBarButtonItem的样式

    在一个APP中导航的重要性和方便性自然不需要多说了 xff0c 由于系统的导航用起来实在不怎么友好 xff0c 一直想抽个时间把导航学习下 由于投入到工作的时间多些 xff0c 懒懒散散的一直都是用的时候才去找度娘 xff0c 一直没来个总
  • IOS学习之一个示例弄懂代理(delegate)和协议

    转自http blog csdn net pony maggie article details 25655443 代理和协议的语法这里不赘述 xff0c 自己查资料 这个demo的思路是这样的 xff0c 有一个A类 xff0c 这个类不
  • ios中使用 NSJSONSerialization对 json数据的解析

    ios5中apple增加了解析JSON的api NSJSONSerialization 通过该类 xff0c 我们可以完成JSON数据与 NSDictionary 和 NSArray 之间的转化 网上已经有人做过测试 xff0c NSJSO
  • 【Xcode】undefined symbols错误总结

    http blog csdn net nextstudio article details 8919241 今天在使用ZBar的时候 xff0c 报了很多undefined symbols错误 特意总结一下这类错误 1 framework缺
  • GitHub第三方资源库整理(OC篇)

    http www jianshu com p a1c3b7d5bab1 随着GitHub star 的项目越来越多 xff0c 而且之前也没有整理 xff0c 所以找起来特别麻烦 xff0c 于是就有了这篇文章 xff0c 一是方便我自己查
  • 整理的一些swift开源项目,仅供学习交流!!

    1 swift3 0开发的自学英语社区app 2 https github com netyouli 3 六阿哥的开源项目 xff0c 均已上架 新版剑三壁纸库app xff0c 使用swift开发 使用swift语言写的一款新闻资讯类的a
  • 令世人惊叹的服务器端 Swift!

    转自 xff1a http www code4app com blog 822721 634 html 时至今日 xff0c Swift 已然演变成了一门开源 跨平台的编程语言 xff0c 有许多个团队正在竞相利用 Swift 语言能够用于
  • 33 个 2017 年必须了解的 iOS 开源库

    http www cocoachina com ios 20170208 18647 html 本文翻译自Medium xff0c 原作者为Pawe Bia ecki 照片版权 xff1a xff08 Unsplash Markus Pe
  • 整理的一些iOS 开源框架

    1 一个拥有多种优雅风格的搜索控制器 https github com iphone5solo PYSearch
  • Windows端通过Vscode或PowerShell连接linux服务器,打开图形界面的程序

    问题 Windows主机不进行任何配置ssh连接到linux服务器上 xff0c 打开图形界面软件 xff0c 会出现下面的错误 xff1a gedit 46927 Gtk WARNING cannot open display 解决Win
  • 循环依赖问题终极解决方案

    今天下午给师兄抽云图数据的时候 xff0c 报错了 说到底还是C 43 43 太菜了 xff0c 调试了一会才发现是写了个循环依赖 xff0c 这四个字是这篇文章的重点 这个不是头文件重复包含的问题 xff0c 看下面的图可能一下就明白了菜
  • Linux ln命令、软链接和硬链接的区别

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 Linux ln命令是一个非常重要命令 xff0c 它的功能是为某一个文件在另外一个位置建立一个同步的链接
  • mysql 查找配置文件 my.ini 位置方法

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 个人备注 xff1a 不显示文件类型时 xff0c my ini 文件名就叫作 my xff0c 文件属性
  • VS2019 + CUDA10.1 安装和配置

    VS2019 43 CUDA10 1 安装和配置 1 CUDA 10 1 安装 1 cuda官方下载网址 xff0c 找到cuda版本为cuda10 1 xff0c 选择自己系统对应的版本下载安装程序 2 运行cuda 10 1 243 4
  • pip使用清华镜像下载

    pip使用清华镜像下载 在国内使用pip安装python第三方包时 xff0c 可能会出现下载速度较慢的情况 xff0c 这时可以尝试从国内的pip镜像源下载这些包 xff0c 大大加快下载速度 xff1a 我们常用清华源 xff0c 在p
  • windows10安装Ubuntu20.04及界面图形化

    这里写自定义目录标题 windows10安装Ubuntu20 04及界面图形化一 安装前windows的配置二 ubuntu20 04系统安装三 ubuntu 20 04更换清华大学源四 中文汉化五 安装图形界面 xff0c VcXsrv的
  • opencv 获取rtsp原始码流代码

    opencv不仅可以获取解码后的图片数据 xff0c 还可以获取未经解码的原始码流数据 这样为使用其他硬解码器提供方便 在编译opencv cmake时需要指定 D WITH FFMPEG 61 ON python 代码如下 xff0c 需
  • 通过Launchpad查找PPA仓库

    我们通常会通过查找安装命令得知一些仓库名 xff0c 我们还可以通过Ubuntu Launchpad网站查询更多信息 首先登录https launchpad net 然后搜索自己关心的ppa xff0c 例如我们搜索得到了ppa jonat
  • ffmpeg 中 rtsp相关源码解析(五)

    lt lt ffmpeg 中 rtsp相关源码解析 四 gt gt 简单介绍了rtp包是通过ff rtsp fetch packet来获取的 我们更深入地问一个问题 xff0c 那么对于vp8 h264等音视频编解码标准 xff0c 这些p

随机推荐

  • 庆祝博客访问量即将突破20万

    2018年开始更新博客 xff0c 到现在已有3年 博客访问量预计这周就突破20万 本来写这博客并没有特别的目的 xff0c 只是想记录在工作学习过程中遇到的问题 也没想到会有这么多的访问 从南京到无锡再到上海 xff0c 一次次突破 从0
  • ffmpeg 源码分析 解码流程

    以ffmpeg 3 4 中的ffplay 来举例 全局初始化 av register all avformat network init AVFORMAT 设置过程 avformat alloc context avformat open
  • post传数组

    业务中涉及批量删除 xff0c 就需要传多个id xff0c 用数组吧 在post中 xff0c 参数都是键值对的形式 xff0c 键和值都是string类型 xff0c 那么就需要把数组序列化为string的形式 Array toStri
  • 基于OpenCV+QT的实时视频传输显示工具(一)

    时常会找一些比较有趣的东西来看 xff0c 但一般都是看完尝试了事 xff0c 没怎么做出总结过 现在想想真是可惜 xff0c 这么多年来 xff0c 看得东西也不少 xff0c 但是留下的印记却很少 xff0c 结果就是找工作时 xff0
  • Gstreamer基础知识介绍

    由于deepstream是基于gstreamer的 xff0c 所以要想在deepstream上做拓展 xff0c 需要对gstreamer有一定的认识 以下主要介绍Gstreamer整体框架和Gstreamer基础概念 一 Gstream
  • ffmpeg 图片转视频命令 互转

    图片转视频 ffmpeg f image2 i home test images image d jpg vcodec libx264 test h264 ffmpeg f image2 i home test images image d
  • git clone --recursive 用处

    git clone recursive 用于循环克隆git子项目 git clone recursive https github com onnx onnx tensorrt git
  • cuda lib64和stubs目录下存在同名so 引起cmake错误

    错误提示 CMake Warning at cmake FindCUDA cmake 1649 add library Cannot generate a safe runtime search path for target test b
  • 【折腾系列—All In One主机】1、 PVE虚拟机系统安装

    PVE虚拟机系统安装 写在前面1 什么是All In One主机 xff1f 2 什么是PVE虚拟机 3 PVE虚拟机的安装3 1 制作PE启动盘进行硬盘格式化3 2 PVE启动盘制作3 3 安装PVE虚拟机 写在前面 为什么要搭建All
  • 如何在IDEA中关闭vim模式

    菜单栏 tools gt vim emulator
  • 数据库技术基础

    数据库技术基础 基本概念 数据库技术是研究数据库的结构 存储 设计 管理和应用的一门软件学科 数据库 xff08 Database xff0c DB xff09 是统一管理的 长期存储在计算机内的 有组织的相关数据的集合 数据库系统 xff
  • windows10 ffmpeg使用clion采集音频(pcm数据)

    span class token comment span span class token comment Created by 克来 M on 2021 1 21 span span class token comment span s
  • windows10 ffmpeg使用clion采集视频(yuv420数据)

    span class token comment span span class token comment Created by 克来 M on 2021 1 21 span span class token comment span s
  • 关于微信开放平台授权事件接收Url的配置以及参数接收

    关于微信开放平台如何申请 xff0c 如何配置 xff0c 如何全网发布的文章 xff0c 大神们已经写了很多 xff0c 不想再造轮子 xff0c 特针对微信授权事件的处理这一个点 xff0c 对自己遇到的坑进行总结 xff0c 也希望能
  • 音视频开发之音频编码原理

    音频编码原理 本篇博客为面向大众的科普性文章 涉及声音原理 音频文件属性 音频格式等方面 预计阅读时间为10分钟 1 何为声音 中学物理中我们知道 xff0c 声音是物体振动产生的声波 声音通过介质 xff08 空气 固体 液体 xff09
  • ElasticSearch6.2.5使用说明

    第一章 ElasticSearch入门篇 第一节 ElasticSearch概述 ElasticSearch是一个基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎 xff0c 基于RESTfulweb接口 Elast
  • 01 es高手进阶系列课程说明

    深度讲解搜索 xff0c 数据分析 xff0c 数据建模 特色 xff1a 纯手工画图剖析各种原理 xff0c 纯实战驱动讲解各种知识点 xff0c 知识体系的细致和完整 怎么实战驱动 xff1f 核心知识篇 xff0c 上半季 xff0c
  • 大数据技术体系

    文件存储 xff1a Hadoop HDFS Tachyon KFS 离线计算 xff1a Hadoop MapReduce Spark 流式 实时计算 xff1a Storm Spark Streaming S4 Heron K V NO
  • 02.结构化搜索_在案例中实战使用term filter来搜索数据

    课程大纲 1 根据用户ID 是否隐藏 帖子ID 发帖日期来搜索帖子 xff08 1 xff09 插入一些测试帖子数据 POST forum article bulk 34 index 34 34 id 34 1 34 articleID 3
  • 03_结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)

    课程大纲 xff08 1 xff09 在倒排索引中查找搜索串 xff0c 获取document list date来举例 word doc1 doc2 doc3 2017 01 01 2017 02 02 2017 03 03 filter