如何查询TypeDB数据库schema中定义的规则并排查推理异常
TypeDB规则查询与传递规则不生效排查
你在schema中定义的传递性层级规则如下:
define rule transitive-hierarchy-rule: when { (before: $a, after: $b) isa hierarchy; (before: $b, after: $c) isa hierarchy; } then { (before: $a, after: $c) isa hierarchy; };
相关官方规则说明:
通过规则定义的事实不会存储在知识图谱中。[...] 只要在schema中定义了对应规则,查询时就会自动生成对应的额外推导事实。
当前版本中,match查询必须使用read事务才能触发推理机制、获取规则推导结果,官方正在后续版本中研发写事务下的推理支持能力。
实际执行现象:在read事务中运行查询match (before: $x, after: $y) isa hierarchy,仅返回2条手动插入的显式记录,未得到预期的第三条传递推导结果:
{ $x iid 0x826e800b8000000000000000 isa task; $y iid 0x826e80048000000000000002 isa task; } { $x iid 0x826e800a8000000000000000 isa task; $y iid 0x826e800b8000000000000000 isa task; }
查询Schema中已定义规则的方法
在read事务中执行下面的查询语句,即可拉取库内所有已定义规则的完整信息:
match $rule isa rule; get $rule;
如果只需要查询指定名称的规则,增加规则名过滤条件即可:
match $rule isa rule, has rule-name "transitive-hierarchy-rule"; get $rule;
返回结果会包含规则的条件体、执行体、启用状态等全部属性,可先确认规则是否被正确写入schema、定义内容是否和预期一致。
传递规则未生效的常见排查方向
- 确认事务初始化时显式开启了推理参数:所有TypeDB官方驱动默认关闭推理功能,仅使用read事务不会自动触发规则推导,必须在创建事务时传入
infer=true的配置项才会启用推理能力,这是最常见的漏配项。 - 检查
hierarchy关系的schema定义:如果hierarchy被标记为抽象关系,或before/after角色未正确绑定task类型作为合法角色玩家,规则会无法匹配到对应数据触发推导。 - 校验插入的显式关系链路:从返回的iid看,已插入的两条关系为
0x826e800b → 0x826e8004...02、0x826e800a → 0x826e800b,链路本身连续通顺,符合规则触发条件,优先检查推理开关配置。
内容的提问来源于stack exchange,提问作者Inspired_Blue
相关产品推荐
相关产品推荐

