Neo4j查询执行过程

twh00eeo  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(160)

我使用的是Neo4j 5.1企业版。
我执行了以下代码:

profile MATCH(d:Dataset {name:'dataset2'})<-[:`has_d`]-(s:Score)-[:`has_a`]->(a:Algorithm {name:'algorithm1'})
MATCH (t:Tag) WHERE t.name IN ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']`
MATCH (i:Image)-[:has_score]->(s)-[:`has_tag`]->(t) 
RETURN i LIMIT 100

由于个人资料的结果太大,我只在这里发布的重要部分:

我希望它在扩展之前按名称过滤标记。
为什么Neo4j在筛选之前会扩展?
我该怎么补救?执行的顺序无关紧要吗?
Filter@Neo4j是一个简单的过滤器还是使用我们的索引?
我很抱歉问了这么多问题,也许有些问题很愚蠢,很明显,但我不明白为什么。
任何帮助都将不胜感激

dtcbnfnu

dtcbnfnu1#

它需要首先从源节点按照类型和方向跟踪关系。
因此,它会按类型和方向展开,然后才能看到结束节点,然后才能过滤那些具有匹配标签的节点。
如果您的关系已经唯一地标识了目标节点标签,那么您可以从这些节点中删除标签(但不能从开始节点中删除标签,否则它将不使用索引)。

相关问题