2015-02-06 208 views
1

在Neo4j 1.9.2中,我想要統計一組節點中每個節點的所有關係。Neo4j 1.9.2:查詢/篩選和計算多個節點類型

我所有的節點都有三個屬性:type,idcreated。他們都通過「追隨」關係相連。以下是它們如何組合在一起的示例:

user('id:1')-[follows]->review('id:1') 
user('id:1')-[follows]->user('id:2') 
user('id:2')-[follows]->review('id:1') 

您明白了。

結果應該是這樣的:

[ 
    { 
    followers: 2, 
    id: 1 
    created: 2013-12-13T12:13:42-08:00 
    type: review 
    }, 
    { 
    followers: 1, 
    id: 2, 
    created: 2012-02-13T12:13:43-08:00 
    type: user 
    }, 
    { 
    followers: 0, 
    id: 1, 
    created: 2012-02-13T12:13:43-08:00, 
    type: user 
    } 
] 

我給出的數據基本上是以下幾點:

{ 
    users: [1, 2], 
    reviews: [1] 
} 

我試着查詢是這樣的:

start user1=node:user('id:1'), 
     user2=node:user('id:2'), 
     review1=node:review1('id:1') 

match user1<-[user1_f:follows]-(), 
     user2<-[user2_f:follows]-(), 
     review1<-[review1_f:follows]-() 

return user1, count(user1_f), 
     user2, count(user2_f), 
     review1, count(review1_f); 

但是顯然這對node:id對的大列表來說是站不住腳的(事實上,Neo真的死了很難一旦查詢變大)。

任何想法如何實現這一目標?我一直在傾訴文件,看看有沒有辦法,但我不確定。

回答

2

如果你想了很多節點上運行計數操作,可以考慮使用這樣的指標:

start users=node:user('id:(1 OR 2 OR 3 OR 4)') 
match user<-[f:follows]-(), 
return user, count(f); 

對於評論,無論是運行一個單獨的查詢或創建索引保持用戶和評論。 如果您有多個以逗號分隔的起始點,則可能會遇到匹配內的交叉產品。

PS:Neo4j 1.9.2已經過時了 - 考慮升級!

+0

是的,我們很樂意進行更新,遺憾的是目前尚不可能。它在路線圖上!所以我聽到的是,除非您爲每種可能的組合編制索引,否則無法跨多個完全任意的類型進行此操作。我認爲最好每個類型只做一個查詢(因爲我們沒有那麼多不同的類型)。謝謝! – wulftone 2015-02-06 23:24:06

+0

我終於實現了這個優化,並且我的響應時間減少了10倍。超級有用! – wulftone 2015-03-13 20:51:35