No Neo4j, preciso encontrar todos os relacionamentos com um determinado valor de propriedade, independentemente do tipo de relacionamento:
WITH ["1651365", "1188654", "1151147", ...] AS relIds
MATCH ()-[r]->() WHERE r.myId IN relIds
RETURN TYPE(r) AS type, properties ( r ) AS props;
Esta consulta funciona, mas é muito lenta. Se eu criar um perfil, vejo que é baseado em uma varredura completa (de 14 milhões de relacionamentos).
O problema é que não há como definir um índice para todos os tipos de relacionamento (posso fazer o mesmo com uma lista de tipos e o mecanismo usará índices definidos para myId
).
Há uma solução? Ao usar o elementId()
, o mecanismo faz uma operação de busca e é muito rápido, mas a documentação desencoraja (dizem que os IDs internos são reutilizados após a exclusão).