首页
/ Cayley图数据库MQL查询语言指南

Cayley图数据库MQL查询语言指南

2025-07-06 01:47:40作者:何将鹤

概述

Cayley图数据库实现了一种基于JSON的查询语言MQL(Metaweb Query Language),这是对Freebase MQL API的部分兼容实现。MQL允许开发者以直观的JSON格式表达图数据查询,特别适合处理复杂的关联关系数据。

MQL基础概念

基本查询结构

在MQL中,每个JSON对象代表图中的节点,而将对象包裹在数组中表示可能存在多个这样的节点。最基本的查询形式如下:

[{
  "id": null
}]

这个查询会返回图中的所有节点,其中id是特殊关键字,表示节点的值。

谓词约束

通过添加谓词(predicate)可以对查询施加约束条件:

[{
  "id": null,
  "name": "Alice"
}]

这个查询会返回所有具有name属性且值为"Alice"的节点。

谓词可以接受多种类型的值:

  • 对象或对象数组(子查询)
  • 字符串和数字(必须匹配的字面量ID)
  • null值(表示必须存在匹配的谓词,但匹配值将替换null)

核心特性

反向谓词

默认情况下,谓词采用正向方向。例如:

[{
  "id": "A",
  "knows": "B"
}]

这匹配的是三元组 A knows B

要查询反向关系,可以使用!前缀:

[{
  "id": "A",
  "!knows": "B"
}]

这将匹配三元组 B knows A

多重谓词

JSON规范不定义具有相同键的对象的处理方式。为了对同一谓词施加多个约束,可以使用@name:前缀:

[{
  "id": "A",
  "@x:knows": "B",
  "@y:knows": "C"
}]

这将匹配同时存在 A knows BA knows C 的情况。

反向规则可以与命名前缀结合使用,形成如 "@a:!knows" 这样的复杂路径查询。

查询示例

简单节点查询

查找所有节点:

[{
  "id": null
}]

带属性约束的查询

查找名为"Bob"的所有节点:

[{
  "id": null,
  "name": "Bob"
}]

关系查询

查找认识"Alice"的所有人:

[{
  "id": null,
  "!knows": "Alice"
}]

复杂条件查询

查找同时认识"Alice"和"Bob"的人:

[{
  "id": null,
  "@x:knows": "Alice",
  "@y:knows": "Bob"
}]

注意事项

  1. Cayley的MQL实现目前是Freebase MQL的一个子集,不支持所有高级特性
  2. 当前版本不包含Freebase的schema推断功能
  3. 设计目标是数据库无关性,可以在不同后端上运行相同的查询

MQL提供了一种直观的方式来查询图数据,特别适合处理复杂的关联关系。通过组合基本查询元素,可以构建出强大的图模式匹配查询。