neo4j не подключается к нескольким ярлыкам - PullRequest
0 голосов
/ 01 января 2019

Моя БД состоит из двух групп узлов (меток) x и y.У узлов также есть дополнительные метки (цвета: синий, красный, зеленый и т. д.).

Мой запрос:MATCH (n1:y)-->(n2:x)<--(n3:blue) RETURN n2.idx

В профиле показано расширение для n3 без ссылки на него синего цвета, в результате чего было получено 12 000 обращений к БД, вытеснив 12 000 строк.Следующий этап - это синий фильтр, в результате которого почти 24 000 обращений к БД возвращают 1 036 строк.

У меня есть ограничения на уникальность idx и idy, и у меня есть индекс для каждого из цветов.

Я попытался использовать атрибут цвета на узлах y, изменив запрос на следующий без каких-либо различий в профиле.MATCH (n1:y)-->(n2:x)<--(n3:y {color:blue}) RETURN n2.idx

Я пробовал using index n3:blue(idy) перед оператором RETURN, но это вызывает синтаксическую ошибку.Я все еще пытаюсь это сделать (простите за каламбур).Как я могу избежать раздувания на этапе db, описанного выше, и сделать так, чтобы он начинался только с синих узлов?

1 Ответ

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

Вы можете использовать подсказку сканирования , чтобы начать использовать сканирование метки на n3.

MATCH (n1:y)-->(n2:x)<--(n3:blue) 
USING SCAN n3:blue
RETURN n2.idx

Кроме того, это может привести к дублированию, если: x узлы могут иметь несколько связей с: y узлы или: синие узлы.Если вам нужны только узлы: x, которые имеют соединение с узлом: y, вы можете попробовать это вместо этого:

MATCH (n2:x)<--(n3:blue) 
USING SCAN n3:blue
WHERE (:y)-->(n2)
WITH DISTINCT n2
RETURN n2.idx
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...