Подсчет треугольников Neo4J с ограничением свойства отношений - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть база данных, связанная с полетом, Airport узлы и Flight ребра. Каждый Flight имеет Carrier свойство. Я хочу посчитать треугольники на графике, которые состоят из одних и тех же Carrier ребер свойства (Сколько треугольников там, где Flight.Carrier = "AA")

Это было бы хорошо и довольно просто:

CALL algo.triangleCount(
  'MATCH (a:Airport) RETURN id(a) as id',
  'MATCH (a1:Airport)-[f:Flight]->(a2:Airport) WHERE f.Carrier = "AA" RETURN id(a1) as source,id(a2) as target',
  {concurrency:4,graph:'cypher'})
YIELD triangleCount

Здесь есть (для меня) сложная часть: я хочу запустить это для 5 разных перевозчиков. По сути, я хочу вызвать счетчик треугольников в UNWIND или FOREACH.

Моя первая мысль была

WITH ["AA","NW","UA","US","CO"] AS carriers
UNWIND carriers as carrier
CALL algo.triangleCount(
  'MATCH (a:Airport) RETURN id(a) as id',
  'MATCH (a1:Airport)-[:Flight{Carrier:carrier}]->(a2:Airport) RETURN id(a1) as source,id(a2) as target',
  {concurrency:4,graph:'cypher'})
YIELD triangleCount, averageClusteringCoefficient
RETURN carrier, triangleCount

, но счет треугольника не распознает carrier, поэтому япоместил UNWIND внутри второго параметра вызова, который сработал, но вернул ложный результат. При запуске первого кода для каждого из 5 носителей их сумма составляет около 6,5 миль, обновленный второй код ('WITH ["AA","NW","UA","US","CO"] AS carriers UNWIND carriers as carrier MATCH (a1:Airport)-[f:Flight]->(a2:Airport) WHERE f.Carrier = carrier RETURN id(a1) as source,id(a2) as target') возвратился чуть более 30 миль, поэтому я предполагаю, что это просто каждый треугольник, в котором все носители ребер являются членамисписок, не обязательно такой же. Как получить цикл, работающий со счетчиком треугольников?

...