我在尝试使用 Neo4js Cypher “解密”逻辑树时遇到问题。
我有一个叶子操作的逻辑树。我想收集有效的叶子集。我目前正在尝试在有效配置节点上收集有效的叶子集。因此,我稍后可以快速通过该配置节点。
示例
(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
- 在 Cypher 中是否有一种简单的方法可以让我在这些树中导航?
- 尝试在 ValidConfiguration 节点中合并有效集是快速查询的好主意吗?
稍后它应该支持表单的查询,
(:Model)->(:ValidConf)->(:Leaf:Option)->(:Feature)
然后返回在有效配置中具有特定功能的所有模型。或以特定配置价格的多个功能。我需要 UDF 或 ObjectGraphMapper 来解决这个问题吗?是否有任何 UDF 可以与我可以使用的此类决策树一起使用?
任何帮助将不胜感激。
创建示例
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。