sqlite数据库的docsize, segdir, segments, stat

在 SQLite 数据库的全文搜索 (FTS) 模块中,有一些内部表和结构用于存储和管理全文搜索索引的数据。对于这些表项,docsize, segdir, segments, stat 等是重要的组成部分,它们之间相互配合,来有效地管理全文索引数据。以下是它们的作用及相互关系:

1. docsize

docsize 是 SQLite FTS 模块的一个内部表,主要用于存储每个文档(或记录)的字段大小信息。

  • 作用:记录了全文索引文档中每个字段的词频信息(即每个字段中包含的单词数量)。

  • 用途:在处理全文查询时,它帮助评估某些相关性评分,比如 TF-IDF,来判断某个文档与查询的匹配度。

  • 结构docsize 通常存储文档 ID 和每个字段的词频。

    sql 复制代码
    CREATE TABLE docsize (
        docid INTEGER PRIMARY KEY,
        size BLOB
    );

2. segdir

segdir 是 FTS5 索引中的目录表,用于存储段(segments)及其相关信息。段是存储全文索引的基本单元。

  • 作用:描述了每个段的元数据,包括每个段的 ID、层次、范围等。

  • 用途:帮助定位和管理多个段的信息,使查询可以快速定位到相关的段进行搜索。

  • 结构:存储每个段的标识符、开始和结束文档的 ID 范围、以及其他元数据。

    sql 复制代码
    CREATE TABLE segdir (
        level INTEGER,
        idx INTEGER,
        start_block INTEGER,
        leaves_end_block INTEGER,
        end_block INTEGER,
        root BLOB,
        PRIMARY KEY(level, idx)
    );
  • 层次结构segdir 中的段通常按层次组织,每一层由多个段组成。在查询时,SQLite 会合并多个段以提高查询效率。

3. segments

segments 是存储全文索引数据的实际内容。每个段(segment)是一个倒排索引,保存了单词到文档的映射关系。

  • 作用:存储每个文档中每个词出现的位置、频率等详细信息,通常以压缩格式存储以节省空间。
  • 用途 :用于快速检索包含特定关键字的文档和位置。查询时,会通过 segdir 表的信息,找到对应的 segments 进行搜索。
  • 结构:每个段可以存储很多块(block),每个块包含一部分倒排索引信息。

4. stat

stat 表存储了全文索引的统计信息,包括文档的总数量、总词汇量等。

  • 作用 :提供统计信息来帮助优化查询性能。例如,可以根据 stat 中的词频信息,优化查询时的相关性排序。

  • 用途stat 表信息可以用来在查询时快速评估某些匹配词的稀有性,从而调整查询结果的排序(例如使用 TF-IDF 或 BM25 等算法)。

    sql 复制代码
    CREATE TABLE stat (
        id INTEGER PRIMARY KEY,
        value BLOB
    );

这些表和概念之间的关系

  • segdir 充当段的目录表,描述了所有存储在 segments 中的段的元数据。
  • segments 是实际存储倒排索引的表,保存每个文档中单词出现的位置和频率。
  • docsize 表保存了每个文档中字段的词频信息,用于计算文档的相关性评分。
  • stat 表记录了全文索引的整体统计信息,帮助优化查询和排名。

查询过程简述

  1. 当执行全文搜索查询时,SQLite 会先通过 segdir 定位到哪些段(segments)中可能包含目标关键字。
  2. 然后使用 segments 中的倒排索引,快速找到包含该关键字的文档。
  3. docsize 帮助进一步计算相关性分数,基于词频和文档长度等信息。
  4. 最后,stat 表中的统计数据用来优化结果排序和查询性能。

这些结构一起协同工作,确保 SQLite 的全文搜索能够高效地存储和查询大规模的文本数据。

相关推荐
随风飘的云1 小时前
MySQL的慢查询优化解决思路
数据库
IvorySQL5 小时前
PostgreSQL 技术日报 (3月7日)|生态更新与内核性能讨论
数据库·postgresql·开源
赵渝强老师5 小时前
【赵渝强老师】金仓数据库的数据文件
数据库·国产数据库·kingbase·金仓数据库
随逸1779 小时前
《Milvus向量数据库从入门到实战,手把手搭建语义检索系统》
数据库
神秘的猪头9 小时前
🚀 React 开发者进阶:RAG 核心——手把手带你玩转 Milvus 向量数据库
数据库·后端·llm
IvorySQL1 天前
PostgreSQL 技术日报 (3月6日)|为什么 Ctrl-C 在 psql 里让人不安?
数据库·postgresql·开源
NineData1 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
IvorySQL1 天前
PostgreSQL 技术日报 (3月5日)|规划器控制力升级,内核能力再进阶
数据库·postgresql·开源
数据组小组2 天前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替