ELK基本都用过,一条日志在入库时,它的具体内容并不会被真实保存在倒排索引中。 在日志入库之前,会先进行分词,过滤掉无用符号等分隔词,找出文档中每个关键词(Term)在文档中的位置及频率权重;然后,将这些关键词保存在 Term Index 以及 Term Dictionary 内;最后,将每个关键词对应的文档 ID 和权重、位置等信息排序合并到 Posting List 中进行保存。通过上述三个结构就实现了一个优化磁盘 IO 的倒排索引。 而查询时,Elasticsearch 会将用户输入的关键字通过分词解析出来,在内存中的 Term Index 单词索引查找到对应 Term Dictionary 字典的索引所在磁盘的 block。接着,由 Term Dictionary 找到对关键词对应的所有相关文档 DocId 及权重,并根据保存的信息和权重算法对查询结果进行排序返回结果。
相关推荐
桦说编程2 小时前
Guava 迭代器增强类介绍235162 小时前
【JVM】Java为啥能跨平台?JDK/JRE/JVM的关系?courtfu2 小时前
Plugin ‘mysql_native_password‘ is not loaded`上进小菜猪3 小时前
测试自动化Replay:让数据库迁移测试回归真实场景的一把“利器”Python私教3 小时前
FastAPI × SQLAlchemy 2.0 Async:从“能跑”到“可压测”的完整工程实践Python私教3 小时前
FastAPI × Loguru:从“能跑”到“可运维”的日志实战Craaaayon4 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)唐僧洗头爱飘柔95275 小时前
【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配置GORM的数据库Jonathan Star5 小时前
在 Go 语言中,模板字符串盘古开天16666 小时前
从零开始:如何搭建你的第一个简单的Flask网站