Chciałbym użyć Smysłowość bliskości algorytm wykresu z Neo4JClient Klient .NET dla Neo4j.

Zapytanie do użycia centralności bliskości w Cypher to:

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

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

Moja próba na tłumaczeniu na 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 Czy moja klasa dla węzłów, które mają SEES między nimi.

Wyjątkiem, jaki otrzymuję:

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

Jaka jest poprawna składnia C # dla tego zapytania?

0
rolyH 1 marzec 2019, 18:32

2 odpowiedzi

Najlepsza odpowiedź

Proste rozwiązanie - Zmień "Węzeł" dla 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;

Zwraca to IEnumerable, gdzie każdy element jest anonimowym typem z dwoma właściwościami do nodeIdu i jego wyniku centralności. Oba Int32 = nodeId.As<Int32>() i Double = centrality.As<Double>() wyglądają jak powinny być bardziej zwięzłe.

Dokumentacja centralności bliskości daje "węzeł" jako Nazwa typu powrotu, ale wydaje się, że powinien być nodeid.

Przydatny zasób dla tych tłumaczeń dotyczących Cyfera do C # jest Strona przykładów Cypher na Neo4Jclient Github stron.

0
rolyH 4 marzec 2019, 19:21

Zamiast node nodeId

Jeśli chcesz węzeł, twoje zapytanie Cypher powinno być takie

(Nie wiem, jak przetłumaczyć to w C #, myślę, że możesz przetłumaczyć to, aby uzyskać węzły):

CALL algo.closeness.stream('SitePoint', 'SEES')
YIELD nodeId, centrality
RETURN algo.getNodeById(nodeId) AS node, centrality
ORDER BY centrality DESC
LIMIT 20;
0
Raj 5 marzec 2019, 05:13