概述
使用以下语法在HDC图上执行图查询:
EXEC{
<query>
} ON <hdcGraphName>
HDC图支持更高效率地从数据库查询数据。但请留意,HDC图不支持修改图结构以及插入、更新、删除数据等操作。
示例图集

在一个空图中运行以下语句定义图结构并插入数据:
ALTER GRAPH CURRENT_GRAPH ADD NODE {
entity ()
};
ALTER GRAPH CURRENT_GRAPH ADD EDGE {
link ()-[{weight float}]->()
};
INSERT (A:entity {_id: "A"}),
(B:entity {_id: "B"}),
(C:entity {_id: "C"}),
(D:entity {_id: "D"}),
(A)-[:link {weight: 1}]->(B),
(A)-[:link {weight: 1.5}]->(C),
(A)-[:link {weight: 0.5}]->(D),
(B)-[:link {weight: 2}]->(C),
(C)-[:link {weight: 0.5}]->(D);
HDC图查询
为全图创建名为hdcGraph
的HDC图:
CREATE HDC GRAPH hdcGraph ON "hdc-server-1" OPTIONS {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
}
在hdcGraph
上执行查询:
EXEC{
MATCH p = ({_id: "A"})-[]-{2}({_id: "C"})
RETURN p
} ON hdcGraph
结果:p

限制图遍历方向
在创建HDC图时,若direction
选项设定为in
或out
,图遍历会被限制只能沿入边或出边进行。若在查询中从缺失的方向进行遍历,会引发报错或生成空结果。
创建HDC图hdcGraph_in_edges
,其中包含所有点和入边:
CREATE HDC GRAPH hdcGraph_in_edges ON "hdc-server-1" OPTIONS {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "in",
load_id: true,
update: "static",
query: "query",
default: false
}
以下查询试图在hdcGraph_in_edges
上遍历点A
的出边,没有结果返回:
EXEC{
MATCH p = ({_id: "A"})-[]->()
RETURN p
} ON hdcGraph_in_edges
HDC图不包含点ID
在创建HDC图时,若load_id
选项设定为false
,则HDC图不包含点的_id
值。若在查询中引用了_id
,则会引发报错或生成空结果。
创建HDC图hdcGraph_no_id
,其中不包含点的_id
值:
CREATE HDC GRAPH hdcGraph_no_id ON "hdc-server-1" OPTIONS {
nodes: {"*": ["*"]},
edges: {"*": ["*"]},
direction: "undirected",
load_id: false,
update: "static",
query: "query",
default: false
}
以下查询使用_id
过滤hdcGraph_no_id
中的点,由于该HDC图不包含点的_id
,执行报错:
EXEC{
MATCH p = ({_id: "A"})-[]-{2}({_id: "C"})
RETURN p
} ON hdcGraph_no_id
HDC图不包含属性
如果创建HDC图时未包含某些属性,查询引用这些属性时会引发报错或生成空结果。
创建HDC图hdcGraph_no_weight
,其中包含所有点属性,但只包含link
边的系统属性:
CREATE HDC GRAPH hdcGraph_no_weight ON "hdc-server-1" OPTIONS {
nodes: {"*": ["*"]},
edges: {"link": []},
direction: "undirected",
load_id: true,
update: "static",
query: "query",
default: false
}
以下查询在hdcGraph_no_weight
上查找加权最短路径,以边属性@link.weight
计算权重。由于weight
属性缺失,没有结果返回:
EXEC{
MATCH p = ({_id: "A"})-[e]-() WHERE e.weight > 1
RETURN p
} ON hdcGraph_no_weight