observations_fts
定义与身份
observations_fts 是 claude-mem 数据库架构中的全文检索索引表,用于承载 observations 记录的 FTS 索引内容。
它不是业务主表,也不是原始 observation 数据的权威存储位置;原始记录仍然位于 observations,而 observations_fts 的职责是为这些记录提供全文检索能力。
角色职责
observations_fts 与 observations 表成对工作:主表保存业务数据,FTS 表保存供全文搜索使用的索引文本。
当前可确认会写入 observations_fts 的字段共有 6 个:
titlesubtitlenarrativetextfactsconcepts
这些字段不是由应用层手工逐条维护,而是通过数据库触发器在 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 触发器。
更新流程分两步,而不是原地覆盖:
- 先删除旧的 FTS 索引记录。
- 再插入一条基于新值生成的 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 索引的字段为
title、subtitle、narrative、text、facts、concepts。 rowid直接使用observations.id,体现两表记录的一一对应。- 插入时直接新增一条 FTS 记录。
- 更新时先通过
'delete'语义删除旧索引,再插入新索引。 - 删除时也通过
'delete'语义移除索引记录。
细节与边界
当前来源展示的是触发器示例代码,因此能够确认的是同步机制、字段范围以及 rowid 映射方式;但来源没有进一步给出 FTS 表的建表语句、所用 FTS 版本、分词器配置、查询语法或额外索引选项。
因此,关于 observations_fts 的可确认结论应限于:它负责为 observations 提供全文索引,并通过插入、更新、删除三个触发器维持索引与主表一致;超出这些内容的实现细节,当前材料尚未明确。