通过属性值高效搜索 Neo4j 关系

问题描述 投票:0回答:1

在 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)。

neo4j cypher
1个回答
0
投票

您可以在多种关系类型的属性上创建全文索引。例如:

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;
© www.soinside.com 2019 - 2024. All rights reserved.