Если вы не нашли (или не смогли расшифровать) документы Neo4j , вот пример, приведенный ниже:
CALL algo.louvain(
'MATCH (p:User) RETURN id(p) as id',
'MATCH (p1:User)-[f:FRIEND]-(p2:User)
RETURN id(p1) as source, id(p2) as target, f.weight as weight',
{graph:'cypher',write:true});
Документы не говорят это явно,но первый запрос, переданный algo.louvain
, указывает набор узлов, которые должны рассматриваться algo.louvain
, а второй запрос определяет отношения между узлами (или подключенными к узлам), указанными в запросе 1.
Thisозначает, что вам нужно будет указать любой тип отношения между пустыми квадратными скобками, которые вы упомянули в вопросе. Алгоритм не будет работать без чего-либо для соединения узлов - без ребер к вершинам, в конце концов, это не граф.
Кроме того, крайне важно важно для репликации RETURN id(p1) as source, id(p2) as target
бит, независимо от формы вашего второго запроса, в противном случае Java выдаст ошибку.
Наконец, с точки зрения запуска algo.scc
для каждого сообщества, вам нужно изменить приведенный выше запрос, чтобыукажите writeProperty
в конфигурации для algo.louvain
. После успешного выполнения этого запроса каждый узел, который был рассмотрен в ходе выполнения algo.louvain
, будет иметь значение 0, 1, 2 и т. Д. В качестве указанного вами свойства. Затем для каждого из этих сообществ вы можете позвонить algo.scc
, как здесь с той же структурой, что и вышеупомянутый вызов algo.louvain
;однако в первом запросе, переданном algo.scc
, вы укажете сообщество, которое вы ищете. Например (это не соответствует действительности, основываясь на вашем вопросе, а не в документации):
// strongly-connected components for community 0
CALL algo.scc(
'MATCH (n:Person {algo.louvain.writeProperty here: 0}) RETURN id(n) as id',
'MATCH (n:Person)-[k:KNOWS]->(m:Person)
RETURN id(n) as source, id(m) as target',
{graph:'cypher',write:true,writeProperty:'partition'})
YIELD loadMillis, computeMillis, writeMillis, setCount, maxSetSize, minSetSize
Затем, как показывают документы, вы можете найти самый большой раздел со следующими данными:
MATCH (u:Person)
RETURN u.partition as partition,count(*) as size_of_partition
ORDER by size_of_partition DESC
LIMIT 1;
или дальнейший запрос вашего (под) графа любым способом, который вы выберете, потому что результаты алгоритмов записываются как свойства на узлах Person
. НТН.