簡體   English   中英

如何從Neo4j Cypher搜索結果中排除連接到特定節點的節點

[英]How to exclude nodes connected to a specific node from Neo4j Cypher search results

我需要執行Neo4J Cypher查詢,從結果中排除連接到特定節點的節點。

我在下面使用該查詢,但是它非常慢(幾秒鍾)。

我下面要做的是首先獲取(上下文類型的)節點,其他節點不應該連接到該節點。

然后,我進行下一個查詢,查找由同一用戶在另一個上下文“ help ”中創建的節點,並排除那些也連接到“ private ”上下文的節點。

MATCH (u:User{uid:'6dbe5450-852d-11e4-9c48-b552fc8c2b90'}), 
(ctxa:Context{name:"private"}), ctxa-[:BY]->u 
WITH ctxa,u MATCH (s:Statement), (ctx:Context{name:"help"}), ctx-[:BY]->u, 
s-[:IN]->ctx, s-[:BY]->u 
WHERE NOT s-[:IN]->ctxa 
RETURN DISTINCT s.uid ORDER BY s.timestamp DESC;

有人有更好的主意嗎?

更新:我也嘗試過:

MATCH (u:User{uid:'b9745f70-a13f-11e3-98c5-476729c16049'}), (s:Statement), 
(ctx:Context{name:"private"}), ctx-[:BY]->u, s-[:IN]->ctx, s-[:BY]->u 
WITH s AS sta, u MATCH (s:Statement), (ctx:Context{name:"help"}), 
ctx-[:BY]->u, s-[:IN]->ctx, s-[rel:BY]->u WHERE s <> sta RETURN DISTINCT s; 

發現在查詢中使用DISTINCT確實提高了速度:

MATCH (u:User{uid:'b9745f70-a13f-11e3-98c5-476729c16049'}), 
(ctxa:Context{name:"private"}), ctxa-[:BY]->u 
WITH DISTINCT ctxa,u 
MATCH (s:Statement), s-[rel:BY]->u, (ctx:Context{name:"bodypractices"}), 
ctx-[:BY]->u, s-[:IN]->ctx  
WHERE NOT s-[:IN]->ctxa 
RETURN DISTINCT s;

基本上,問題在於我沒有在第一個WITH子句中使用DISTINCT ,並且由於數據庫的結構(或者可能出於其他原因),我為ctxa獲取了很多行,然后在WHERE語句中對每個行進行了檢查,從而減慢了速度一切都下來了。

暫無
暫無

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

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