我试图用Neo4js Cypher“分解”一个逻辑树时出现问题。XOR和Neo4j中的Tree 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,我以后就不能正确地获得和操作笛卡尔乘积。 (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。
你的数据模型是怎样的?你能分享一个小例子图表(例如作为'CREATE'操作)吗? –