Neo4j Попытка выполнить второй запрос MATCH по результатам первого MATCH - PullRequest
0 голосов
/ 10 января 2019

В Neo4j я использую алгоритм обнаружения сообщества и возвращаю только те узлы и отношения, принадлежащие сообществу, которым присвоен идентификатор '10', как показано ниже.

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10
RETURN p

Теперь я хочу дополнительно отфильтровать это подмножество базы данных графа и отобразить узлы и отношения, принадлежащие сообществу '10', которые имеют PageRank, определенный с помощью алгоритма центральности PageRank, который больше указанного значения, например 1.

Я пытался сделать это, используя следующее:

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10 AND c.pagerank >1
RETURN p

Однако это не возвращает требуемый результат. Узлы типа «Функция» и «Требование», которые сами имеют pagerank больше 1, исключаются, если они связаны с узлом «Scenario» с pagerank меньше 1, поскольку эти узлы не удовлетворяют предложению MATCH.

Какой запрос я могу использовать, чтобы ТОЛЬКО отобразить узлы, принадлежащие сообществу '10', которые имеют PageRank больше 1, независимо от PageRank узлов, к которым они подключены. Другими словами, я хочу вернуть узлы с pagerank больше 1, даже если они подключены к другому узлу, например, «Сценарий» с pagerank меньше 1, как видно из предыдущего примера кода.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

, не зная намного больше, я бы посоветовал вам создать сообщество примечаний с идентификатором и связать их с функцией, требованием и сценарием. и начать там. Обход будет намного быстрее.

match (:community{Id:10})-[]-(x) 
where (x:Function or x:Req or req:Sec) and x.pagerank >...
0 голосов
/ 10 января 2019

Разве вы не добьетесь того, что хотите, с помощью оператора OR?

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10 AND (a.pagerank >1 OR b.pagerank >1 OR c.pagerank >1)
RETURN p

Достигаете ли вы возврата результатов, у которых PageRank> 1 на одном из узлов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...