Neo4j Переменная Глубина не работает - PullRequest
0 голосов
/ 23 июня 2018

enter image description here Я пытаюсь создать зашифрованный запрос для двух сценариев:

  1. Тесты с глубиной более 2
  2. Конкретный тест с глубиной большечем 2

Как и на рисунке, вы можете видеть, что тесты 1, 2, 3 в некоторой степени связаны с глубиной, превышающей 2. Шифр, который я запустил, был:

MATCH p=()<-[r:TEST_FOR*..10]-() RETURN p LIMIT 50

Теперь, когдаЯ изменил свой шифр на ниже, тогда я не получаю никаких записей / результатов или узлов.

1) MATCH p=()<-[r:TEST_FOR*2..5]-() RETURN p LIMIT 50
2) MATCH p=()<-[r:TEST_FOR*2]-() RETURN p LIMIT 50
3) MATCH p=(d:Disease)<-[r:TEST_FOR*]-(t:Tests) WHERE t.testname = 'Alkaline Phosphatase (ALP)'  RETURN p
4) MATCH p=()<-[r:TEST_FOR*..10]-(t:Tests {testname:'Alkaline Phosphatase (ALP)'}) RETURN p LIMIT 50

Когда я запускаю запросы 3 и 4 выше, я получаю те же результаты, то есть 1 тест с 5 заболеваниями, но это не такПродолжим дальше для этого конкретного теста.

Но если вы видите изображение, тест связан с двумя другими тестами!Моя структура выглядит следующим образом:

  1. Тесты (имя теста)
  2. Болезнь (имя болезни, сделал)
  3. Linknode (parentdieaseid, имя теста)

Я использовал приведенный ниже запрос для создания отношений "TEST_FOR"

match(d:Disease), (l:Linknode) where d.did = l.parentdiseaseid
with d, l.testname as name
match(t:Test {testname:name}) create (d)<-[:TEST_FOR]-(t);

1 Ответ

0 голосов
/ 24 июня 2018

Направление это проблема здесь. Каждый из ваших 4 запросов выше использует направленный шаблон сопоставления переменной длины, означающий, что каждое пройденное отношение должно использовать указанное направление (входящее). Однако это не сработает, когда вы нажмете: Тестирует узлы, поскольку они имеют только исходящие отношения с: узлами болезни.

Простое решение состоит в том, чтобы пропустить направление, поэтому соответствующий шаблон будет проходить: отношения TEST_FOR независимо от направления. Например:

MATCH p=()-[r:TEST_FOR*2..5]-() RETURN p LIMIT 50

Обратите внимание, что причина вашего исходного запроса

MATCH p=()<-[r:TEST_FOR*..10]-() RETURN p LIMIT 50

возвращал полный график потому, что он никогда не проходил глубже, чем один прыжок от каждого узла: Болезнь (поскольку он никогда не сможет пройти через входящее отношение: TEST_FOR из узла: Тесты), но он начинался с каждый: узел Болезни, так что естественно, что поражает каждый узел: тестирует также. Вы бы получили тот же график с этим:

MATCH p=()<-[r:TEST_FOR]-() RETURN p LIMIT 50
...