博客
关于我
Elasticsearch 之(16)_filter执行原理深度剖析(bitset机制与caching机制)
阅读量:787 次
发布时间:2023-01-24

本文共 1668 字,大约阅读时间需要 5 分钟。

倒排索引与过滤器优化技术

倒排索引是一种高效的文档检索机制,通过将文档内容预处理并构建索引,能够快速定位符合特定条件的文档。在实际应用中,过滤器(Filter)的使用可以显著提升检索效率。本文将详细介绍倒排索引中使用过滤器的实现方法及其优化策略。

(1)倒排索引中的关键术语

以日期(date)和单词(word)为例,倒排索引存储了每个单词在不同文档中的出现位置和对应的文档ID。具体展示如下:

word        doc1  doc2  doc3---------   ----- ----- -----2017-01-01 *2017-02-02 *2017-03-03 *

通过搜索“2017-02-02”,倒排索引返回匹配该日期的文档列表为doc2和doc3。

(2)bitset的定义与作用

bitset是一种用来标记文档与过滤条件匹配情况的二进制数组。数组中的每个元素要么为0(不匹配),要么为1(匹配)。基于找到的文档列表,bitset可以反映哪些文档符合当前过滤条件。例如:

bitset = [0, 1, 1]

这表示doc1不匹配,doc2和doc3匹配。

(3)过滤器优化策略

在实际应用中,过滤器的使用可以通过以下方式优化:

  • 优先遍历稀疏bitset

    越稀疏的bitset越可能过滤掉更多文档。例如:

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

    优先处理稀疏的bitset可以快速缩小结果范围。

  • 遍历所有bitset,找到完全匹配的文档

    需要同时满足所有过滤条件的文档,才视为最终结果。例如:

    -过滤条件:

    postDate=2017-01-01,对应的bitset为 [0, 0, 1, 1, 0, 0]userID=1,对应的bitset为 [0, 1, 0, 1, 0, 1]

    最终匹配的文档为doc4。

  • 缓存策略

    为提高性能,可以对频繁查询的过滤条件进行缓存:

    • 缓存条件:如果某个过滤条件在最近256个查询中出现次数超过一定阈值,则缓存其bitset。
    • 适用场景:对于小段段(即段的大小小于1000或占总段数的3%),由于段很快会与其他小段合并,缓存意义不大。小段的bitset可以直接 scanner 扫描,无需缓存。

    例如,小段bitset [0, 0, 1, 0] 可以直接生成,无需缓存。

  • (4)缓存机制的注意事项

  • 自动更新

    文档增减或修改时,相关的bitset会自动更新。例如:

    • 文档id=5,更新日期为2017-01-01,其对应的bitset变为 [0, 0, 1, 0, 1]
    • 文档id=1,日期修改为2017-01-01,其bitset变为 [1, 0, 1, 0, 1]
  • ** filter caching**

    过滤条件并不是直接缓存文档结果,而是缓存bitset。这意味着下次同一个过滤条件出现时,不需要重新扫描倒排索引,可以直接使用预先生成的bitset。

  • (5)filter在查询中的角色

  • 过滤作用

    过滤器的作用是快速过滤掉不符合条件的文档,而不是计算相关性得分或排序。因此,filter操作比查询更高效。

  • 补充说明

    查询操作不仅计算文档与搜索条件的相关性得分,还会根据得分对结果进行排序。而filter操作仅负责过滤数据。

  • (6)定期更新与维护

    为了确保过滤器的准确性,需要定期更新缓存的bitset:

    • 文档新增或修改时,相关的过滤条件对应的bitset会被自动更新。
    • 如果文档属于小段,可以直接 scanner 扫描,无需缓存(小段很快会被合并)。

    整个过程旨在通过过滤器优化文档检索,提升系统的性能和效率。

    总结

    倒排索引与过滤器的结合使用,能够显著提升文档检索效率。通过构建bitset、优化查询顺序以及采用缓存策略,可以省去不必要的扫描工作,提升系统性能。对于频繁查询的过滤条件,可以通过缓存其bitset,进一步优化性能。这一机制不仅节省内存空间,还能提升文档检索的速度,使得系统更加高效和用户体验更加优良。

    转载地址:http://beeyk.baihongyu.com/

    你可能感兴趣的文章
    ElasticSearch设置字段的keyword属性
    查看>>
    Elasticsearch设置账号密码
    查看>>
    elasticsearch配置文件里的一些坑 [Failed to load settings from [elasticsearch.yml]]
    查看>>
    Elasticsearch面试题
    查看>>
    element ui 时间日期选择器 el-date-picker 报错 Prop being mutated “placement“
    查看>>
    Hibernate二级缓存配置
    查看>>
    element 如何使用自定义icon图标
    查看>>
    element-plus修改主题颜色
    查看>>
    element-plus的el-date-picker日期范围选择控件,根据开始日期限定结束日期的可选范围为开始日期到开始日期+30天
    查看>>
    18 个一线工作中常用 Shell 脚本【实用版】
    查看>>
    element-ui:el-input输入数字-整数和小数
    查看>>
    ElementUI-el-progress改变进度条颜色跟文字样式
    查看>>
    element事件(change,click)不触发
    查看>>
    10个高级的 SQL 查询技巧,你掌握了几个?
    查看>>
    ELK原理与介绍(转)
    查看>>
    ELK学习笔记(三)单台服务器多节点部署
    查看>>
    ELK应用日志收集实战
    查看>>
    elTable火狐浏览器换行
    查看>>
    15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    2023年深信服、奇安信、360等大厂网络安全校招面试真题合集(附答案),让你面试轻松无压力!
    查看>>