1

John が Met に商品を販売し、Met が Bob と Alen の両方に商品を販売しており、Alen が再び John に商品を販売しているとします。私が必要としているのは、この例の John..Met..Alen のようなすべての閉じた円を返す Cypher クエリです。これは、Alen が再び John に商品を販売し、関係プロパティ (金額) の最低額も表示する閉じた円になっているためです。私はデータベース全体からこれを行い、すべての閉じた円と最小量を取得します。ありがとう!

4

2 に答える 2

4

ステファンの答えから始めて、最低限、パスの長さを考慮に入れたいと思うでしょう。

start n=node(*) 
match p=n-[:SELLS_TO*1..5]->n 
return p, lenght(p)

ノードあたりのパスの長さを最短にする

start n=node(*) 
match p=n-[:SELLS_TO*1..5]->n 
return n, min(lenght(p))

最短経路を取得したい場合:

start n=node(*) 
match p=n-[:SELLS_TO*1..5]->n 
with n, collect(nodes(p)) as nodes, min(length(nodes(p))) as l
return n, head(filter(p in nodes : length(p) = l)) as shortest_circle,l

例については、Neo4j コンソールを参照してください: http://console.neo4j.org/r/wrm522

グラフ全体をスキャンすると、円の各ノードに対して同じ円が複数回得られることに注意してください。

これは、nodes、length、collect、head、filter 関数、および min 集計を使用します。参照: http://docs.neo4j.org/chunked/milestone/query-function.html

ステファンがすでに言ったように、すべてのノードをスキャンすることはおそらく非常に高価です。

于 2013-03-31T01:26:00.697 に答える