我使用的是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是一个简单的过滤器还是使用我们的索引?
我很抱歉问了这么多问题,也许有些问题很愚蠢,很明显,但我不明白为什么。
任何帮助都将不胜感激
1条答案
按热度按时间dtcbnfnu1#
它需要首先从源节点按照类型和方向跟踪关系。
因此,它会按类型和方向展开,然后才能看到结束节点,然后才能过滤那些具有匹配标签的节点。
如果您的关系已经唯一地标识了目标节点标签,那么您可以从这些节点中删除标签(但不能从开始节点中删除标签,否则它将不使用索引)。