CompanyとWorkerの2種類のノードを持つ簡単な例を考えてみましょう。どの会社のc1とc2(私がここで無視するいくつかの条件を尊重します)については、私は知っておく必要があります:1.共通の労働者の数、c1の労働者の数、c2の労働者の数。Neo4j同じエッジの数倍を使用するCypherパス
私の最初の推測されました:
MATCH (w_c1:Worker)--(c1:Company)--(w_common)--(c2:Company)--(w_c2:Worker)
WHERE <something>
RETURN c1, c2, COUNT(DISTINCT w_common), COUNT(DISTINCT w_c1), COUNT(DISTINCT w_c1)
その要求に伴う問題は、私が接続されたノード、COUNT(DISTINCT w_c1)(w_c2のid)の任意のペアの間に一つだけのリンクを持っている場合にのみカウントしない、ということである
c2と共通ではないc1の作業者。しかし、いくつかのノード間にいくつかの関係がある場合、その結果は「正しい」ことがあります。 (w_common) - (c2:Company) - (w_c2:Worker)は一致しません( "worker1") - ( "company2") - ( "worker1")(無限ループを回避する意味があります)。
私の第二の推測では、二つの部分に要求を分割することでした: 私の最初の推測があった。
MATCH (c1:Company)--(w_common)--(c2:Company)
MATCH (c1)--(w_c1:Worker), (c2)--(w_c2:Worker)
WHERE <something>
RETURN c1, c2, COUNT(DISTINCT w_common), COUNT(DISTINCT w_c1), COUNT(DISTINCT w_c1)
しかし、その後、結果が正しいですが、私は大きな上で、確かにデカルトの製品に関する警告を持っており、私のリクエストは数時間後に完了しません。私は2つのマッチの間に "WITH c1、w_common、c2"を試みましたが、まだ警告があります
どうすればいいですか?
おかげで、私は実際にSIZE関数を試しましたが、私は特定の会社と労働者の間にいくつかの関係があるかもしれません。 – Vandy
':HIRED'のような特有のものがありますか?それで 'size((c1) - [:HIRED] - >())'のようなことができます。 –