Я пытаюсь написать запрос, чтобы найти все узлы с полустепенью X и возвращать только пути, которые содержат те узлы, когда длина пути равна Yнайти пути с определенной длиной в сочетании с узлами с определенной степенью Neo4j
Если Я хочу, чтобы получить только узлы с полустепенью XI используйте следующий Cypher-запрос
MATCH (s:URL)-[r:VISITED*]->(t:URL)
WITH s, count(t) as degreeout
WHERE 73 in s.job_id and degreeout <4
return s, degreeout
Если я хочу, чтобы получить только пути с длиной = XI использовать следующий запрос
MATCH p=(s:URL)-[r:VISITED*]->(t:URL)
WHERE length(p)=7
return p
Я попытался объединить два предыдущих запросов в следующем запросе
MATCH (s:URL)-[r:VISITED*]->(t:URL)
WITH s, COLLECT(DISTINCT id(s)) as matched, count(t) as degreeout
WHERE 73 in s.job_id and degreeout <4
MATCH p=(s2:URL)-[r:VISITED*]-(t2:URL)
WHERE id(s2) in matched and length(p) >=1
RETURN p
Всякий раз, когда я выполнить запрос, машина продолжает обработку, а затем я получаю сообщение об ошибке не хватает памяти.
Кажется, что существует бесконечный цикл!
Я маркировать стартовый узел как STARTING_URL ... так старт узел будет иметь две метки «URL» и «STARTING_URL» –
Что касается job_id, я не могу иметь его как значение свойства int. Я должен иметь его как свойство массива. Я не думаю, что этот способ (j: Job {job_id: 73}) (свойство как словарь) позволит мне обрабатывать атрибут job_id как массив ...! ?? –
Проблема с этим подходом заключается в том, что поиск узла по свойству массива неэффективен, так как он не будет использовать какие-либо индексы, а Neo4j придется сканировать все узлы с соответствующими метками. Если у вас есть n job_ids для каждого STARTING_URL, вы можете создать один узел для каждого job_id и иметь отношение к STARTING_URL, как я пытался объяснить в последнем разделе моего ответа. Этот подход будет использовать больше преимуществ возможностей графического представления Neo4j. – albertoperdomo