我想知道如何在neo4j中執行路徑查詢。例如,我有以下所示的路徑的查詢:分析Neo4j路徑查詢
match p=(n)-[r*1..10]->(m)
where
(
n.URI='http://yago-knowledge.org/resource/Jacob_T._Schwartz' OR
n.URI='http://yago-knowledge.org/resource/Anna_Karina'
) AND
filter(x IN r where type(x)=~'.*hasAcademicAdvisor.*') AND
filter(y IN r where type(y)=~'.*isCitizenOf.*') AND
filter(z IN r where type(z)=~'.*participatedIn.*') AND
filter(u IN r where type(u)=~'.*happendedIn.*') AND
filter(v IN r where type(v)=~'.*dealsWith.*')
return p, length(p) order by length(p) desc;
此查詢是找到與源節點「http://yago-knowledge.org/resource/Jacob_T._Schwartz」或「http://yago-knowledge.org/resource/Anna_Karina」具有一定的關係的曲線圖數據庫路徑。
我對此查詢使用PROFILE命令,下面是我得到的執行計劃。
注意,在第5行第5欄的內容太長,所以我把***而不是把實際的內容。
其實,***表示((((((Property(n,URI(0)) == { AUTOSTRING0} OR Property(n,URI(0)) == { AUTOSTRING1}) AND nonEmpty(FilterFunction(r,x,RelationshipTypeFunction(x) ~= /{ AUTOSTRING2}/))) AND nonEmpty(FilterFunction(r,y,RelationshipTypeFunction(y) ~= /{ AUTOSTRING3}/))) AND nonEmpty(FilterFunction(r,z,RelationshipTypeFunction(z) ~= /{ AUTOSTRING4}/))) AND nonEmpty(FilterFunction(r,u,RelationshipTypeFunction(u) ~= /{ AUTOSTRING5}/))) AND nonEmpty(FilterFunction(r,v,RelationshipTypeFunction(v) ~= /{ AUTOSTRING6}/)))
對不起壞格式。
有人能幫我解釋一下這個計劃嗎?提前致謝!!!
太感謝你了,布萊恩。是的,我有我的理由使用正則表達式來匹配關係類型。實際上,在我的應用場景中,我想要在一組節點之間找到路徑,以便這些路徑包含所有指定的關係。但是,我不關心關係的順序。這是我想出能夠實現我的目標的唯一途徑。另外,我同意你關於添加標籤和使用性能索引。我會嘗試的! – sgao
FWIW,我給出的語法沒有指定特定的順序,只是沿着路徑的所有關係都必須是指定類型之一 –
但是,我需要所有關係都出現在最終路徑中。 – sgao