Я пишу запрос Cypher в Neo4j 2.0.4, который пытается получить общее количество входящих и исходящих отношений для выбранного узла. Я могу сделать это легко, когда я использую только этот запрос один-узел-в-времени, например, так:Использование совпадения с несколькими пунктами приводит к нечетным результатам
MATCH (g1:someIndex{name:"name1"})
MATCH g1-[r1]-()
RETURN count(r1);
//Returns 305
MATCH (g2:someIndex{name:"name2"})
MATCH g2-[r2]-()
RETURN count(r2);
//Returns 2334
Но когда я пытаюсь выполнить запрос с 2-мя узлами вместе (т.е. получить общее количество отношения для g1 и g2), я, кажется, получаю причудливый результат.
MATCH (g1:someIndex{name:"name1"}), (g2:someIndex{name:"name2"})
MATCH g1-[r1]-(), g2-[r2]-()
RETURN count(r1)+count(r2);
//Returns 1423740
По какой-то причине это число намного больше, чем общее количество 305 + 2334.
Похоже, что другие пользователи Neo4j столкнулись странные вопросы, при использовании нескольких MATCH
положений, так что я прочитал объяснение Майкла Хунгера на https://groups.google.com/d/msg/neo4j/7ePLU8y93h8/8jpuopsFEFsJ, который консультировал пользователей Neo4j к трубе результаты одного матча с использованием WITH
, чтобы избежать «идентификатор уникальности» , Однако, когда я запускаю следующий запрос, он просто раз из:
MATCH (g1:gene{name:"SV422_HUMAN"}),(g2:gene{name:"BRCA1_HUMAN"})
MATCH g1-[r1]-()
WITH r1
MATCH g2-[r2]-()
RETURN count(r1)+count(r2);
Я подозреваю, что этот запрос не возвращается, потому что есть много записей, возвращаемый r1
. В этом случае, как бы я мог использовать запрос «get-number-of-relationship» на двух узлах? Я просто использую какой-то неправильный синтаксис или есть какая-то фундаментальная проблема с логикой моего запроса «2 узла за раз»?
Спасибо Николь! Я не знал, что мой текущий запрос использует кросс-продукт; теперь это намного больше. –