簡體   English   中英

如何用cypher和neo4j匹配左右節點

[英]how to match right and left nodes with cypher and neo4j

我嘗試在項目中使用Neo4J圖形數據庫,並嘗試向您解釋我的問題。

我想在每個結果的右邊和左邊有最長的路徑,在8個節點的范圍內。 但是我不知道圖表兩端的最后一個節點

下圖是一個基本示例。 我的圖像一條鏈一樣構建:

我的數據庫-Neo4j圖

我的問題是找到左右節點。 通過這個虛擬查詢,我得到了重復的結果

MATCH p=((nl)<-[:PREV*0..8]-(i)-[:NEXT*0..8]->(nr)) RETURN nodes(p);

這將返回過多的重復結果。 以下是一些結果樣本:

i
h | i
g | h | i
...
i | j
i | j | k
...
h | i | j
h | i | j | k
...
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q

最后的結果是唯一讓我感興趣的結果。

看來Neo4j在限制8之內向左和向右返回節點的所有可能組合。

附加信息:

  • 可以有多個“中間節點”(示例中為“ i”)
  • 我想要左邊8個節點,右邊8個或更少,但總是兩側的最大節點數

是否可以使用Cypher執行此操作?

如果只需要一個,則按路徑長度排序並限制為單個結果:

MATCH p=((nl)<-[:PREV*0..8]-(i)-[:NEXT*0..8]->(nr)) 
WITH p
ORDER BY length(p) DESC
LIMIT 1
RETURN nodes(p);

或者,您可以在每一側進行匹配和聚集:

MATCH p=(nl)<-[:PREV*0..8]-(i)
WITH i, nl
ORDER BY length(p) DESC
WITH i, collect(nl) as nodes
MATCH p = (i)-[:NEXT*1..8]->(nr)
WITH nodes, i, nr
ORDER BY length(p) ASC
WITH i, nodes + collect(nr) as nodes
RETURN nodes;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM