在 Neo4j 中,我需要查找具有给定属性值的所有关系,独立于关系类型:
WITH ["1651365", "1188654", "1151147", ...] AS relIds
MATCH ()-[r]->() WHERE r.myId IN relIds
RETURN r.type AS type, properties ( r ) AS props;
这个查询可以工作,但是速度很慢。如果我对其进行分析,我会发现它是基于(1400 万个关系)的完整扫描。
问题是无法在所有关系类型上定义索引(我可以对类型列表执行相同操作,引擎将使用为
myId
定义的索引)。
有解决办法吗?使用
elementId()
时,引擎会执行查找操作,速度非常快,但文档不鼓励这样做(他们说删除后会重用内部 ID)。
您可以在多种关系类型的属性上创建全文索引。例如:
CREATE FULLTEXT INDEX ft_rel_myId IF NOT EXISTS FOR ()-[r:A|B|C|D|E]-() ON EACH [r.myId];
使用该索引,您可以进行全文搜索:
WITH apoc.text.join(["1651365", "1188654", "1151147"], ' OR ') AS ft_query
CALL db.index.fulltext.queryRelationships("ft_rel_myId", ft_query) YIELD relationship, score
WHERE score = 1.0
RETURN relationship.type AS type, properties (relationship) AS props;