在neo4j查询中搜索属性

时间:2018-09-10 16:38:34

标签: neo4j cypher

有一个Person节点,它包含2个属性:firstName和lastName。用户可以输入firstName或lastName或两者都输入。如果同时指定了两个名称,则不能保证名称按firstName和lastName顺序排列。例如:如果名称为sherlock holmes,则用户可以给出holmes sherlock或仅给出sherlockholmessherlock holmes。在所有这些情况下,我们都必须获取福尔摩斯节点。如果未指定任何输入,则将返回所有“ Person”节点。

我尝试了以下查询:

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

其中{1}是名称。

有人可以帮我吗!

1 个答案:

答案 0 :(得分: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参数为空字符串,则此查询将匹配任何具有空字符串作为PersonfirstName值的两个lastName节点这些属性。