2013-10-06 64 views
0

我有neo4j中的搜索項目圖模型。密碼計數節點間連接的不同排列

所以我有以下數據類型的節點: ItemKey, 和category

  • 每個Item有幾個連接key小號
  • 每個Category有幾個連接key小號

我想做一個統計檢查圖表。我想知道如果我從每個category中取出一個key - 每組密鑰有多少個連接的Item

所以,如果我有key_A(12)從Category_Bcategory_Akey_B(34),我可以這樣做:

START key1 = node(12), key2 = node(34) 
MATCH key1 <--(item), key2<--(item) 
RETURN count(item) 

很簡單......但我需要運行的每一套相同鍵。 (每個類別都有一個鍵)

如何爲每個鍵的排列運行相同的問題?

回答

2

找到答案!

start cat1=node:node_auto_index(name="Category1"),cat2=node:node_auto_index(name="Category2") 
MATCH (item) --> (key1)<--(cat1), 
     (item)--> (key2)<--(cat2) 
where (item.type="item") 
with key1, key2 , collect(distinct item.name) as items  
return key1.name,key2.name, items, length(items) 
+2

很高興你找到答案!你也可以嘗試通過在一個通用術語上加入兩個表達式來簡化你的模式:MATCH(cat1) - >(key1)<--(item)-->(key2)< - (cat2)'。 「WHERE」子句的另一種選擇是鍵和鍵之間的關係不同於鍵和類之間的關係,並在模式中包含關係類型。 – jjaderberg

+0

謝謝。它確實簡化了它。不過,在我的情況下,我實際上有兩個以上的類別和鍵,有沒有辦法簡化3個類別的MATCH行? – skme

0

你能試試嗎?

start cat=node:node_auto_index("name:(Category1 Category2 Category3") 
MATCH (item)-->(key)<--(cat) 
where (item.type="item") 
with key.name as key_name, collect(distinct item.name) as items 
order by key.name 
with collect(key_name) as keys, reduce(a=[],i in collect(items) : a + i) as items2 
return keys, items2, length(items2) 

可能張貼的示例數據集來http://console.neo4j.org

或描述爲一個曲線圖,要旨(http://gist.neo4j.org)將是巨大的。

+0

我在http://console.neo4j.org/r/ItemSearch上分享了我的示例,分類爲:「身高,體重,年齡」。試圖運行你的查詢,但'減少'表達式不能被評估。 (並且在第一行有一個缺失的')')。) – skme