By Unknown | Monday, January 28, 2013
Posted in: , | 0 comments

Neo4p一些使用筆記

今天下午跟Neo4j還有REST::Neo4p奮戰了一陣子,該是作些筆記。
假設我要增加一個Node,只要以下指令就可以了,其中的name是Node的property。
my $n1 = REST::Neo4p::Node->new( {name => $val} );
 接著我要對這一個Node增加Relationship的用法是
$n1->relate_to($to_node,'RELTYPE');
$to_node表示對象node,第二個變數是Relationship的類別,第三個變數如果你要同時設定property的話再寫入就可以了。接下來是一個查詢:

my $query = REST::Neo4p::Query->new("START n=node(156) MATCH (n)-[r]-(x) RETURN n,r,x");
$query->execute();
while(my $row = $query->fetch){
    print $row->[0]->id."\n";
    print $row->[1]->type."\n";
    print $row->[2]->id."\n";
}

上面的例子使用了Cypher語法作為查詢,查詢與ID為156相連的Node及Relationship;$row->[0]及$row->[2]是REST::Neo4p::Node物件,$row->[1]是REST::Neo4p::Relationship物件。如果想要更進一步的到Node的property可以使用$row->[0]->get_property('Property_name')來取得。

基本上依照上面列出的功能,就可以簡單的建構出匯入Pathway資料的程式,不過這部份可能得等到下禮拜才能完成。另外我也在網路上找到一些文章,也是關於這部份的教學而且看起來目的和我差不多,等到明天再參考看看。希望可以藉由Graph DB的特性充分利用在我們Pathway資料建制,並增加可用性及方便度,部份根據我這兩天研究的結果應該是會有滿大的幫助就看之後我有多少時間把這些東西弄起來了。

一些連結
Cypher Query Language:寫的還算滿好懂的,如果啥都不知道就從這邊來吧。
REST::Neo4p:大致上都還ok,但是Node的那部份get_properties這個傳回來的東西跟他上面寫的不一樣勒。

Read more
By Unknown | Sunday, January 27, 2013
Posted in: | 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大概寫完了,接下來就是要看怎樣把資料塞進去了。

Read more