W
AI-Wiki
ENTITY

observations_fts

定义与身份

observations_ftsclaude-mem 数据库架构中的全文检索索引表,用于承载 observations 记录的 FTS 索引内容。

它不是业务主表,也不是原始 observation 数据的权威存储位置;原始记录仍然位于 observations,而 observations_fts 的职责是为这些记录提供全文检索能力。

角色职责

observations_ftsobservations 表成对工作:主表保存业务数据,FTS 表保存供全文搜索使用的索引文本。

当前可确认会写入 observations_fts 的字段共有 6 个:

  • title
  • subtitle
  • narrative
  • text
  • facts
  • concepts

这些字段不是由应用层手工逐条维护,而是通过数据库触发器在 observations 发生插入、更新、删除时自动同步到 observations_fts

与 observations 的对应关系

observations_fts 使用 rowid 映射 observations.id,这说明两表中的同一条 observation 通过主表 id 与 FTS 表 rowid 建立直接对应关系。

在插入触发器示例中,写入语句为:

  • INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts)
  • VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts);

这里 new.id 被直接写入 rowid,表明 FTS 索引记录不是独立生成另一套标识,而是复用 observations 主表记录的标识值来保持一一对应。

同步维护机制

新增时

observations 有新记录插入后,会触发 observations_ai 触发器。

该触发器执行一次直接插入,把新记录的 id 和 6 个文本字段写入 observations_fts。也就是说,新增场景下不会先删除旧索引,而是直接创建对应的 FTS 记录。

更新时

observations 中既有记录被更新后,会触发 observations_au 触发器。

更新流程分两步,而不是原地覆盖:

  1. 先删除旧的 FTS 索引记录。
  2. 再插入一条基于新值生成的 FTS 索引记录。

第一步删除旧索引时,使用的是 FTS 特有的插入删除语义,而不是普通 DELETE 语句:

  • INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, text, facts, concepts)
  • VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts);

这里把 'delete' 写入与表同名的列位,用于通知 FTS 删除旧索引项;随后才会执行新的普通插入:

  • VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts);

因此,observations_fts 的更新语义可以明确概括为:先删旧索引,再建新索引。

删除时

observations 中的记录被删除后,会触发 observations_ad 触发器。

删除场景同样不是对 observations_fts 执行普通删除,而是再次利用 FTS 的 'delete' 插入语义,按旧值删除对应索引记录:

  • VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts);

这说明 observations_fts 的删除维护依赖 FTS 机制本身,而不是把它当作普通关系表来处理。

关键信息

  • observations_fts 是全文检索索引表,不是业务主表。
  • 它与 observations 表配套使用,由触发器自动维护同步。
  • 已确认进入 FTS 索引的字段为 titlesubtitlenarrativetextfactsconcepts
  • rowid 直接使用 observations.id,体现两表记录的一一对应。
  • 插入时直接新增一条 FTS 记录。
  • 更新时先通过 'delete' 语义删除旧索引,再插入新索引。
  • 删除时也通过 'delete' 语义移除索引记录。

细节与边界

当前来源展示的是触发器示例代码,因此能够确认的是同步机制、字段范围以及 rowid 映射方式;但来源没有进一步给出 FTS 表的建表语句、所用 FTS 版本、分词器配置、查询语法或额外索引选项。

因此,关于 observations_fts 的可确认结论应限于:它负责为 observations 提供全文索引,并通过插入、更新、删除三个触发器维持索引与主表一致;超出这些内容的实现细节,当前材料尚未明确。

相关条目