簡體   English   中英

如何在Neo4jClient中使用neo4j圖算法

[英]How to use the neo4j graph algorithms with Neo4jClient

我想在Neo4j的.Net客戶端Neo4jClient中使用緊密度中心圖算法。

在Cypher中使用緊密度中心點的查詢是:

CALL algo.closeness.stream('Node', 'LINK')
YIELD nodeId, centrality

RETURN algo.getNodeById(nodeId).id AS node, centrality
ORDER BY centrality DESC
LIMIT 20;

我嘗試翻譯成C#:

var clcsCent =
_graphClient.Cypher.Call("algo.closeness.stream('SitePoint', 'SEES')")
.Yield("node,centrality")
.Return((node,centrality)=>new {
Int32 = node.As<Int32>(),
Double = centrality.As<Double>()
})
.Results;

SitePoint是我的類,用於它們之間具有SEES關系的節點。

我得到的異常是:

SyntaxException: Unknown procedure output: `node` (line 2, column 7 (offset: 
55))
"YIELD node,centrality"
        ^

此查詢的正確C#語法是什么?

簡單的解決方案-更改nodeId的“節點”:

var clcsCent =
_graphClient.Cypher.Call("algo.closeness.stream('SitePoint', 'SEES')")
.Yield("nodeId,centrality")
.Return((nodeId,centrality)=>new {
Int32 = nodeId.As<Int32>(),
Double = centrality.As<Double>()
})
.Results;

這將返回一個IEnumerable,其中每個元素都是匿名類型,其具有兩個屬性供nodeId及其中心得分使用。 Int32 = nodeId.As<Int32>()Double = centrality.As<Double>()看起來都應該更簡潔。

緊密度集中度文檔將“ node”作為返回類型的名稱,但似乎應該是nodeId。

這些從cypher到C#轉換的有用資源是Neo4jClient github頁面上的cypher 示例頁面

沒錯,此查詢返回的是nodeId而不是node

如果您想要節點,那么您的Cypher查詢應該像這樣

(我不知道如何用C#來翻譯它,我想您可以翻譯這個以獲取節點):

CALL algo.closeness.stream('SitePoint', 'SEES')
YIELD nodeId, centrality
RETURN algo.getNodeById(nodeId) AS node, centrality
ORDER BY centrality DESC
LIMIT 20;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM