用途:按 Basic Memory 笔记的 YAML frontmatter 结构化字段检索,而非仅靠自由文本。除 title、type、tags、permalink、schema 等标准键外,任何自定义 YAML 键都会被索引为 entity_metadata 并可查询。
主要能力:所有元数据搜索均通过 search_notes 完成,用 metadata_filters 传过滤字典,也可用 tags、status 快捷参数;省略 query 即为纯过滤搜索。过滤条件之间为 AND 逻辑。支持等值({"status": "active"})、数组包含({"tags": ["security", "oauth"]},所列值全部存在)、$in({"priority": {"$in": ["high", "critical"]}})、比较($gt、$gte、$lt、$lte,数值按数值比较、字符串按字典序)、$between 闭区间({"score": {"$between": [0.3, 0.8]}})、null(字段缺失或显式为 null)、点号嵌套({"schema.version": "2"})。查询中 tag: 前缀会自动转为标签过滤,如 search_notes("tag:tier1") 等价于 search_notes("", tags=["tier1"]),多标签用逗号或空格分隔且须全部匹配。
使用方式:search_notes(metadata_filters={"status": "in-progress"}) 可只按过滤返回;search_notes("oauth flow", tags=["security"], metadata_filters={"confidence": {"$gt": 0.7}}) 可文本加过滤组合。tags 和 status 通过 setdefault 合并进 metadata_filters,同名键以显式过滤为准。
限制:算子必须带 $ 前缀,写成 gte 会被当精确匹配键而静默返回空结果。键需匹配 [A-Za-z0-9_-]+,点号分隔层级;算子字典只能含一个算子;$in 与数组包含要求非空列表;$between 必须恰好 [min, max];null 仅可作普通等值值,不能用于 $in、$between、数组包含或比较中。比较与 $between 的边界须为有限数值,超出浮点表示范围的大整数会被拒绝。元数据过滤只命中 Markdown 笔记,被索引的 PDF、图片等普通文件无 frontmatter,不会出现在结果中,即使查 null 也不会。