在neo4j查询中搜索属性

在neo4j查询中搜索属性,neo4j,cypher,Neo4j,Cypher,有一个节点Person,它由两个属性组成:firstName、lastName。用户可以输入firstName或lastName或两者。如果指定了这两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为福尔摩斯,则用户可以给出福尔摩斯或仅福尔摩斯或福尔摩斯。在所有这些情况下,我们必须找到福尔摩斯节点。如果未指定输入,则将返回所有Person节点 我尝试了以下查询: Match (n : Person ) where n.firstName+" "+n.lastN

有一个节点Person,它由两个属性组成:firstName、lastName。用户可以输入firstName或lastName或两者。如果指定了这两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为
福尔摩斯
,则用户可以给出
福尔摩斯
或仅
福尔摩斯
福尔摩斯
。在所有这些情况下,我们必须找到福尔摩斯节点。如果未指定输入,则将返回所有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
?请参阅我的最新答案。