在neo4j查询中搜索属性
有一个节点Person,它由两个属性组成:firstName、lastName。用户可以输入firstName或lastName或两者。如果指定了这两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为在neo4j查询中搜索属性,neo4j,cypher,Neo4j,Cypher,有一个节点Person,它由两个属性组成:firstName、lastName。用户可以输入firstName或lastName或两者。如果指定了这两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为福尔摩斯,则用户可以给出福尔摩斯或仅福尔摩斯或福尔摩斯。在所有这些情况下,我们必须找到福尔摩斯节点。如果未指定输入,则将返回所有Person节点 我尝试了以下查询: Match (n : Person ) where n.firstName+" "+n.lastN
福尔摩斯
,则用户可以给出福尔摩斯
或仅福尔摩斯
或福尔摩斯
。在所有这些情况下,我们必须找到福尔摩斯节点。如果未指定输入,则将返回所有Person节点
我尝试了以下查询:
Match (n : Person )
where n.firstName+" "+n.lastName ={1} or n.lastName+" "+n.firstName={1}
return n
其中{1}是名称
有人能帮我吗 [更新两次]
像下面这样的方法应该可以奏效
WITH SPLIT($name, ' ') AS parts
WITH parts, SIZE(parts)=1 AS one_part
MATCH (n: Person)
WHERE
parts IS NULL OR
(n.firstName=parts[0] AND (one_part OR n.lastName=parts[1])) OR
(n.lastName=parts[0] AND (one_part OR n.firstName=parts[1])) OR
(parts[0] = '' AND NOT EXISTS(n.firstName) AND NOT EXISTS(n.lastName))
RETURN n
特殊情况:
- 如果
参数为空,则返回所有name
节点Person
- 如果
参数是空字符串,则此查询将匹配任何name
节点,该节点将空字符串作为Person
或firstName
值,或者不具有这些属性lastName
$name
,您希望查询返回哪些节点?我已更新了答案,以支持name
参数具有空字符串值的特殊情况。这有用吗?必须向使用参数的查询传递该参数的值——不能忽略它。可以传递名称,也可以不传递名称。如果未传递,则必须返回所有节点。必须传递name
参数,否则会出现错误。我想您的意思是可以传递null
?请参阅我的最新答案。