でよく接しているグラフから戻ります。この質問は、私が以前に尋ねた質問here(さらに以前のバージョンhere)の直接の拡張です。プロパティの数がnより大きい場合は、Neo4j
は、私はこのようになりますグラフデータベースを持っていると言う:
ちょうど私が尋ねた前回の質問のように、このことについてだけは本当に興味深いのは、SomeProperty
は、「はい」または「いいえことができるということです'
3つのノードのうちの1行に、このプロパティの「はい」があります。
5つのノードのうち3つのノードには、このプロパティで「はい」があります。
(わずかな哲学的追記:。?。私はこれは悪いグラフスキーマであることを疑うに始めているノードの各セットの中に、各ノードは他のすべてのノードに接続している、のでなぜ私は心配していません2つのグループのグループがあるという事実については、私はこのグラフを作成したときに、「返された530行」というトークバックを得ました。これは実際にグラフ構造内に530のサブパスを作成したことを意味し、 。)
とにかく、私が解決しようとしている問題は、以前の単純でよりリニアなコンテキストhereで解決しようとしていた問題とほとんど同じです。
私はどこにも内がSomeProperty
の発生をカウントグラフは、私は、これは一般的な、簡単な問題であると思うだろう2.
以上であると述べたのに対し、これらのばらばらのグラフのいずれかの完全なパスを返すようにしたいです。たとえば、2人の無関係な家族がいて、誰かが「私に家族と一緒に私に2人以上の左利きの人がいる」と言う人がいます。
この問題のシンプルな化身、の線に沿って何かをお勧めスーパースマート#cybersam:グラフは直線のより多くのに似ている、とdoesnの場合は素晴らしい作品
MATCH p=(a:person)-[:RELATED_TO*]->(b:person)
WHERE
NOT()-[:RELATED_TO]->(a) AND
NOT (b)-[:RELATED_TO]->() AND
2 < REDUCE(s = 0, x IN NODES(p) | CASE WHEN x. SomeProperty = 'Yes' THEN s + 1 ELSE s END)
RETURN p;
...」セット内の各ノードは互いのノードに関連しています。
#cybersamのクエリがこのより複雑なグラフを処理しない理由は、終端ノードがないためです。
(もう一つの哲学的追記:。私は、これは使用双方向性によるものかもしれないと思うのグラフの密な、複雑な関係は、性能だけでなく、照会して、組合せ問題を提起することを理論を考え出す始めています質問するとCypherによって)?
ここに私のデータがあります。どんなアドバイスも感謝しており、私が学習曲線を上げるのを助けてくれてありがとう。そのように、各関係グループのために家族ノード:
// match (n) detach delete n;
CREATE (albert:person {gender: 'Male', name: 'Albert', SomeProperty: 'Yes'})
CREATE (annie:person {gender: 'Female', name: 'Annie', SomeProperty: 'No'})
CREATE (adrian:person {gender: 'Female', name: 'Adrian', SomeProperty: 'No'})
CREATE (albert)-[:RELATED_TO]->(annie)
CREATE (annie)-[:RELATED_TO]->(albert)
CREATE (annie)-[:RELATED_TO]->(adrian)
CREATE (adrian)-[:RELATED_TO]->(annie)
CREATE (albert)-[:RELATED_TO]->(adrian)
CREATE (adrian)-[:RELATED_TO]->(albert)
CREATE (bill:person {gender: 'Male', name: 'Bill', SomeProperty: 'Yes'})
CREATE (barb:person {gender: 'Female', name: 'Barb', SomeProperty: 'Yes'})
CREATE (barry:person {gender: 'Male', name: 'Barry', SomeProperty: 'Yes'})
CREATE (bart:person {gender: 'Male', name: 'Bart', SomeProperty: 'No'})
CREATE (bartholemu:person {gender: 'Male', name: 'Bartholemu', SomeProperty: 'No'})
CREATE (bill)-[:RELATED_TO]->(barb)
CREATE (barb)-[:RELATED_TO]->(bill)
CREATE (barb)-[:RELATED_TO]->(barry)
CREATE (barry)-[:RELATED_TO]->(barb)
CREATE (barry)-[:RELATED_TO]->(bart)
CREATE (bart)-[:RELATED_TO]->(barry)
CREATE (bart)-[:RELATED_TO]->(bartholemu)
CREATE (bartholemu)-[:RELATED_TO]->(bart)
CREATE (bill)-[:RELATED_TO]->(bartholemu)
CREATE (bartholemu)-[:RELATED_TO]->(bill)
:そうようperson.SomeProperty =「はい」家族:あなたはその後、十分に持っている家族のグループを選ぶことができますあなたが必要と考えるソリューションの代わりに解決しようとしていますか? –
あなたの前の質問であなたが求めていたのは終端ノードがありません。 WHERE/NOT条件を取り除くと、端末ノードのフィルタリングがなくなります。 –