Как использовать графовые алгоритмы neo4j с Neo4jClient - PullRequest
0 голосов
/ 01 марта 2019

Я хотел бы использовать алгоритм централизации близости с Neo4jClient .Net-клиентом для neo4j.

Запрос на использование централизации близости в 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 # для этого запроса?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Вы правы, этот запрос возвращает 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;
0 голосов
/ 04 марта 2019

Простое решение - измените 'node' для 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' в качестве имени возвращаемого типа, но кажется, что это должноbe nodeId.

Полезным ресурсом для этих преобразований шифров в C # является страница примеров шифров на страницах Neo4jClient github

...