gpt4 book ai didi

Neo4j:匹配多个标签(2个或更多)

转载 作者:行者123 更新时间:2023-12-03 06:18:50 24 4
gpt4 key购买 nike

我想做一个搜索,我想从2个标签(OR条件)开始遍历。例如,我需要找出所有标签为“男性”或“女性”且其属性 name =~ '.ail.' 的节点。

最佳答案

您可以将此条件放在 WHERE 子句中:

MATCH (n)
WHERE n:Male OR n:Female
RETURN n

编辑

正如 @tbaum 指出的,这会执行 AllNodesScan。我在标签相当新的时候写了答案,并期望查询规划器最终为每个标签使用 NodeByLabelScan 来实现它,就像对单标签情况一样

MATCH (n)
WHERE n:Male
RETURN n

我仍然认为这是一个合理的查询表达式,并且期望查询规划器使用标签扫描来实现它是合理的,但从 Neo4j 2.2.3 开始,查询仍然使用 AllNodesScan 和标签过滤器。因此,这里有一个更详细的替代方案。由于标签析取表示集合并集,并且该并集可以用不同的方式表达,因此我们可以用查询规划器实现的方式来表达它,而不需要扫描所有节点,而是以每个标签开始 NodeByLabelScan .

MATCH (n:Male)
WHERE n.name =~ '.ail.'
RETURN n
UNION MATCH (n:Female)
WHERE n.name =~ '.ail.'
RETURN n

这意味着为每个标签表达一次查询,并使用显式的UNION将它们连接起来。这并不是不合理的,至少对于较少数量的标签来说是这样,但我不清楚为什么查询规划器不应该能够从更简单的查询中推断出相同的实现,所以我打开了一个 github 问题 here .

关于Neo4j:匹配多个标签(2个或更多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003769/

24 4 0