Neo4js Cypherを使用して論理ツリーを「解読」しようとすると問題が発生します。Neo4j CypherのXORとツリー
私は論理的なツリーを持っています。私は葉の有効なセットを収集したい。 現在、有効なコンフィギュレーションノードに有効なリーフセットを収集しようとしています。そのため、後でそのコンフィグレーションノードをすばやくパスすることができます。
例 (1 AND 2) AND (3 AND 4)
は (1 XOR 2) AND (3 XOR 4)
しかしmatch (rule)-[AND*]->(leaf) return collect(leaf)
するのは簡単です、私は単一の変数で1,2,3,4を収集するたびに、私は後できちんとAND演算のデカルト積を得ることができないため、問題です。 (13,14,23,24)
が有効です。
操作がXOR, AND, Not AND, Not XOR
- ある私は、このようなツリーをナビゲートするために行方不明ですサイファーでの簡単な方法はありますか?
- 有効な設定を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操作)? –