Neo4j Cypher 中的异或与树

XOR, AND Tree in Neo4j Cypher

我在尝试使用 Neo4js Cypher "decypher" 逻辑树时遇到问题。

我有一个树叶操作的逻辑树。我想收集有效的树叶集。 我目前正在尝试在有效配置节点上收集有效的叶子集。所以我以后可以快速通过该配置节点。

例子 (1 AND 2) AND (3 AND 4) 很容易match (rule)-[AND*]->(leaf) return collect(leaf) 然而 (1 XOR 2) AND (3 XOR 4) 这是一个问题,因为每当我在单个变量中收集 1、2、3、4 时,我以后都无法正确获得 AND 运算的笛卡尔积。 (13,14,23,24) 有效。

一般来说,我有一个可变深度的树(最大大约 3-4) 操作是XOR, AND, Not AND, Not XOR

非常感谢任何帮助。

创建示例

CREATE (r:Rule{id:123})-[:COMPOSITION]->
startOp:AndOperation:Operation:Operand)
CREATE (startOp)-[:AND]->(intermediateOp1:OrOperation:Operation:Operand)
CREATE (startOp)-[:AND]->(intermediateOp2:OrOperation:Operation:Operand)
CREATE (intermediateOp1)-[:XOR]->(o1:Option:Operand{id:321})
CREATE (intermediateOp1)-[:XOR]->(o2:Option:Operand{id:564})
CREATE (intermediateOp2)-[:XOR]->(o3:Option:Operand{id:876})
CREATE (intermediateOp2)-[:XOR]->(o4:Option:Operand{id:227})
CREATE (o1)-[:CONSISTS_OF]->(f1:Feature{text:"magicwand"})
....

这棵树是对称的,但它们通常不是。我需要使 o1 + o4 有效,而 o1 + o2 无效。 OR 应理解为 XOR。

我认为 Cypher 不会用于计算布尔二元表达式树。引用 相关问题:

This is because Cypher has no looping statements powerful enough to iteratively calculate subresults (in the correct order) for trees of arbitrary depth.

您将不得不寻找一些额外的系统来进行评估。

如果您会编码 Java,您应该能够通过实施您自己的自定义过程以正确的顺序评估布尔表达式树来做到这一点。