有一个节点Person,它由2个属性组成:firstName,lastName。用户可以输入firstName或lastName或两者。如果同时指定了两个名称,则无法保证名称采用firstName和lastName顺序。例如:如果名称是sherlock holmes
,则用户可以给holmes sherlock
或仅给sherlock
或holmes
或sherlock holmes
。在所有这些情况下,我们必须获得sherlock holmes节点。如果未指定任何输入,则返回所有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
参数为NULL,则返回所有Person
节点。name
参数是空字符串,则此查询将匹配任何具有空字符串的Person
节点作为firstName
或lastName
值,或者不具有这些属性。