在 Neo4j 中,我需要找到具有给定属性值的所有关系,独立于关系类型:
WITH ["1651365", "1188654", "1151147", ...] AS relIds
MATCH ()-[r]->() WHERE r.myId IN relIds
RETURN TYPE(r) AS type, properties ( r ) AS props;
这个查询有效,但速度很慢。如果我对其进行分析,我发现它基于全面扫描(1400 万个关系)。
问题是没有办法为所有关系类型定义索引(我可以对类型列表执行相同操作,引擎将使用为其定义的索引myId
)。
有解决办法吗?使用时elementId()
,引擎会执行查找操作,并且速度非常快,但文档不鼓励这样做(他们说内部ID在删除后会被重用)。
您可以对多种关系类型的属性创建全文索引。例如:
利用该索引,您可以进行全文搜索:
我已经接受了cybersam 的答案,因为它对于一般情况来说是一个很好的答案(当添加有关如何生成关系类型列表的评论时)。
不过,我正在考虑另一种方法:
我从之前的查询中获取了 relId,它也可以获取关系类型,然后后者可以用于构建“|”列表要传递给我的原始查询的分隔类型。
这样,查询变得高效(
myId
每种类型都有一个索引,Neo4j 使用它)。