У меня есть конкретный запрос Cypher, который запускает персонализированный PageRank над набором исходных узлов.Я хочу RETURN
лучших n
узлов оценки, включая их оценки PageRank, дополнительные свойства и все отношения между этими узлами.
С помощью SO я дошел до этой точки:
MATCH (p) WHERE p.paper_id IN $paper_ids
CALL algo.pageRank.stream(null, null, {direction: "BOTH", sourceNodes: [p]})
YIELD nodeId, score
WITH p, nodeId, score ORDER BY score DESC
LIMIT 25
MATCH (n) WHERE id(n) = nodeId
WITH collect(nodeId) as ids, collect(n {.*, score}) as nodes
CALL apoc.algo.cover(ids) YIELD rel
RETURN ids, nodes, collect(rel) as rels
Единственная проблема, с которой я столкнулся, заключается в том, что этот запрос возвращает дубликаты узлов.Например, узел может быть возвращен несколько раз с разными оценками PageRank.Я подозреваю, что это связано с наличием нескольких исходных узлов, поэтому разные оценки соответствуют оценкам PageRank для каждого исходного узла.При запуске PageRank для одного исходного узла нет дубликатов.
Это проблема, потому что я хочу RETURN
n
уникальных узлов (в приведенном выше блоке кода n
= 25)В типичном прогоне с двумя исходными узлами я получаю около 21-22 уникальных узлов.
Как мне обеспечить I RETURN
n
уникальных узлов?