在neo4j查询中搜索属性

问题描述 投票:1回答:1

有一个节点Person,它由2个属性组成:firstName,lastName。用户可以输入firstName或lastName或两者。如果同时指定了两个名称,则无法保证名称采用firstName和lastName顺序。例如:如果名称是sherlock holmes,则用户可以给holmes sherlock或仅给sherlockholmessherlock holmes。在所有这些情况下,我们必须获得sherlock holmes节点。如果未指定任何输入,则返回所有Person节点。

我尝试了以下查询:

Match (n : Person )
where n.firstName+" "+n.lastName ={1} or n.lastName+" "+n.firstName={1}  
return n

其中{1}是名称。

谁能帮我吗 !!

neo4j cypher
1个回答
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节点作为firstNamelastName值,或者不具有这些属性。
© www.soinside.com 2019 - 2024. All rights reserved.