У меня довольно простой график. Он имеет только около 100 узлов и 400 отношений. Я пытаюсь запустить множество запросов cypher, которые ранжируют результаты, основанные на существовании определенных отношений. Однако даже с небольшой базой данных эти запросы выходят из строя. Может ли кто-нибудь идентифицировать проблему с моим запросом, который вызовет тайм-аут?Cypher Query Timeout для комплексного запроса с весами
В нижеследующем запросе выполняется поиск различных шаблонов. Если шаблон существует, он применяет вес к отношению. В конце он объединяет весы и оценивает результаты, поэтому приоритет имеет узел с наивысшим весом (наиболее важные отношения).
START node=node(1)
MATCH (node)-[a?:REQUIRES]-(thing0)-[?:RELATED]-(stuff)
,(node)-[b?:REQUIRES]-(thing1)-[:RELATED]-(system1)-[:COMPOSITION]-(something1)-[?:VERSION]-(stuff)
,(node)-[c?:REQUIRES]-(thing2)-[:RELATED]-(something2)-[?:VERSION]-(stuff)
,(node)-[d?:REQUIRES]-(thing3)-[:REQUIRES]-(project1)-[:REQUIRES]-(thing6)-[?:RELATED]-(stuff)
,(node)-[e?:REQUIRES]-(thing4)-[:DESCRIBES]-(part)-[:DESCRIBES]-(thing5)-[?:RELATED]-(stuff)
WITH stuff
, count(distinct a)*.15 as shareA
, count(distinct b)*.35 as shareB
, count(distinct c)*.25 as shareC
, count(distinct d)*.10 as shareD
, count(distinct e)*.15 as shareE
WHERE has(stuff.__type__)
AND stuff.__type__='full.namespace.to.stuff'
SET stuff.weight = shareA + shareB + shareC + shareD + shareE
RETURN DISTINCT stuff
ORDER BY stuff.weight DESC
У меня нет времени для правильного ответа, но необязательный соединитель отношений часто является причиной медленности. Вы можете попробовать разделить его на 'WITH', поэтому вам не нужно использовать дополнительные отношения, если это возможно. Вы сделали «профиль», чтобы узнать, что вернется? –
Я новичок в Neo4j. Можете объяснить, что вы подразумеваете под «сделанным профилем»? – Blaine
Кроме того, я не уверен, что могу переписать запрос, используя «WITH». Каждый из шаблонов, которые я проверяю, на самом деле необязателен. Я считаю, что WITH ограничит набор результатов только включением узлов, соответствующих всем шаблонам. – Blaine