У меня есть встроенный граф db узлов (пользователи твиттера) и направленных ребер (следует).
Я пытаюсь установить все отношения между пользователями (набор A), за которыми следует указанный пользователь (узел U). Также отношения между узлами в A
и указанным узлом U
.
Мой запрос:
START u=node:user_id(user_id={id_of_U})
MATCH p = u-->following, p2= following-[?]->u, p3 = following-[?]->()<--u
RETURN distinct rels(p),rels(p2),rels(p3)
Этот запрос дает мне то, что я ожидаю, но проблема в том, что он занимает так много времени, когда указанный пользователь подписывается на слишком много пользователей.
Я перепробовал множество запросов, и приведенный выше запрос пока что лучший. Тем не менее, я уверен, что есть более эффективные способы сделать это, потому что, когда я получаю эти отношения в java-методе, просматривая всех пользователей в «A», получая все отношения для каждого из них (Direction.BOTH), а затем фильтрация отношений с помощью «A» (удаление отношений, у которых есть начальный или конечный узел, не принадлежащий «A»), для пользователя, следующего за 500 людьми, требуется всего 8 секунд, тогда как запрос шифрования не может даже потерпеть неудачу, не взорвав мою кучу ...