Posted in:
By Unknown 0 comments

Neo4j筆記

Baisc Query

Create

新增node並同時增添屬性
CREATE n = {name : 'Andres', title : 'Developer'}
新增並返回查詢
CREATE (a {name : 'Andres'})RETURN a 
新增relationship並增添屬性
START a=node(1), b=node(2)CREATE a-[r:RELTYPE {name : 'like' }]->bRETURN r 

Search

利用id查詢node
START n=node(1)RETURN n
複數個node
START n=node(1, 2, 3)RETURN n 
搜尋複數個node於一列

START a=node(1), b=node(2)RETURN a,b

全部
START n=node(*)RETURN n 
查詢relationship
START r=relationship(0)RETURN r 
利用index查詢 node或者relationship,注意nodes及rels代表是index的名子

START n=node:nodes(name = "A")RETURN n

START r=relationship:rels(name = "Andrés")
RETURN r

Match

查詢跟node3關聯的node

START n=node(3)MATCH (n)--(x)RETURN x
指定方向性(由node3出去的)

START n=node(3)MATCH (n)-->(x)RETURN x
查詢與node有關聯的relationship,返回relationship
START n=node(3)MATCH (n)-[r]->()RETURN r 
一樣返回 relationship,但是限定為BLOCKS
 START n=node(3)MATCH (n)-[r:BLOCKS]->()RETURN r 
BLOCKS或KNOWS都行
START n=node(3)MATCH (n)-[r:BLOCKS|KNOWS]->()RETURN r  
指向node3
START n=node(3)MATCH (n)<-[r:BLOCKS|KNOWS]-()RETURN r   
限定relationship為BLOCKS,返回node
START n=node(3)MATCH (n)-[:BLOCKS]->(x)RETURN x 
接下來這個Case比較特殊,查詢node3,2,4並且其關聯為KNOWS,此外關聯可以允數的層數為第一層到第三層,所以即使node3並沒有與node4有KNOWS的關聯,但是因為node4與node2有KNOW的關聯,所以也在符合條件的範圍內。

START a=node(3), x=node(2, 4)MATCH a-[:KNOWS*1..3]->xRETURN a,x
限制與a關聯為LOVES
START a=node(3)MATCH a-[r?:LOVES]->()RETURN a,r 

兩點之間最短路徑,限制在15層內
START d=node(1), e=node(2)MATCH p = allShortestPaths( d-[*..15]->e )RETURN p 
或者是所有

START d=node(1), e=node(2)MATCH p = allShortestPaths( d-[*..15]->e )RETURN p



以上資料來源



這東西從我想要拿來試到現在已經有8,9個月了,果然執行力還是不夠,不過幸好我記性好...。花了快兩個小時k這些東西,不過花這時間是值得的,看來把這資料庫拿來儲存pathway鈽但方便使用,而且要做搜尋也更方便更直覺。

這禮拜五已經把KEGG的Parser用XML::SAX大概寫完了,接下來就是要看怎樣把資料塞進去了。

Leave a Reply