Memgraph触发器中如何过滤特定类型节点边后调用online算法update方法?
解决Memgraph触发器中过滤特定顶点/边类型的问题
由于Memgraph暂不支持基于类型的条件触发器,你可以在将参数传入community_detection_online.update()前,通过Cypher的集合过滤语法,对每个触发器提供的顶点/边集合进行类型筛选。
核心思路
- 对顶点集合:使用
labels()函数获取顶点标签,筛选包含目标标签的顶点 - 对边集合:使用
type()函数获取边的类型,筛选匹配目标类型的边
完整触发器示例
假设你只想处理标签为User的顶点,以及类型为FOLLOWS的边,触发器代码可以修改为:
CREATE TRIGGER sample_trigger BEFORE COMMIT EXECUTE CALL community_detection_online.update( [v IN createdVertices WHERE 'User' IN labels(v)], [e IN createdEdges WHERE type(e) = 'FOLLOWS'], [v IN updatedVertices WHERE 'User' IN labels(v)], [e IN updatedEdges WHERE type(e) = 'FOLLOWS'], [v IN deletedVertices WHERE 'User' IN labels(v)], [e IN deletedEdges WHERE type(e) = 'FOLLOWS'] ) YIELD *;
扩展调整
- 若需要匹配多个顶点标签,可使用逻辑或:
[v IN createdVertices WHERE 'User' IN labels(v) OR 'Post' IN labels(v)] - 若需要匹配多个边类型,同样使用逻辑或:
[e IN createdEdges WHERE type(e) = 'FOLLOWS' OR type(e) = 'LIKES']
这种方式直接在触发器的执行语句中完成集合过滤,确保只有符合目标类型的顶点和边被传入在线社区检测的update方法中。
内容的提问来源于stack exchange,提问作者Moraltox
相关产品推荐
相关产品推荐

