Задать вопрос

Неправильное вычисление деления в neo4j, как этого избежать?

В neo4j между запросами

MATCH (a), (b)
WHERE a<>b
WITH length(shortestPath((a)-[]->(b))) AS dist, a, b
RETURN DISTINCT sum(1.0/dist) AS closeness, a 
ORDER BY closeness DESC

и
MATCH (a), (b)
WHERE a<>b
WITH length(shortestPath((a)-[]->(b))) AS dist, a, b
RETURN DISTINCT sum(dist) AS closeness, a 
ORDER BY closeness DESC

нет никакой разницы. То есть не происходит деление единицы на длину пути.

Для графа

CREATE (A {name: "A"})
CREATE (B {name: "B"})
CREATE (C {name: "C"})
CREATE (D {name: "D"})
CREATE (E {name: "E"})

CREATE (A)-[:TO]->(E)
CREATE (A)-[:TO]->(B)
CREATE (B)-[:TO]->(C)
CREATE (B)-[:TO]->(E)
CREATE (C)-[:TO]->(D)
CREATE (E)-[:TO]->(D)
CREATE (D)-[:TO]->(B)

оба запроса возвращают такой ответ:
"closeness" "a"
2   {"name":"B"}
2   {"name":"A"}
1   {"name":"C"}
1   {"name":"E"}
1   {"name":"D"}

Я хочу понять почему это присхотит.
  • Вопрос задан
  • 363 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
al_gon
@al_gon
Потому, что делите всегда на 1. Тоесть 1/1

Разве не так хотели?
RETURN DISTINCT 1.0/sum(dist)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы