我是一个有用的助手,可以为您翻译文本。
我有一个大图表,其中有代表人员的节点。他们都有名字和姓氏属性,有些人还有中间名属性。我正在寻找可能表示同一人的节点,因此正在查看名称的不同排列方式。目前,我正在比较姓氏和名字的第一个字母[有些节点只有缩写],但无法确定如何测试是否存在中间名。
我的当前查询是:
match (a:Author), (b:Author)
where
a.surname=b.surname and
( a.firstname starts with 'A' and b.firstname starts with 'A')
return distinct a,b
我的理解是OPTIONAL MATCH仅适用于模式,因此这不起作用。我找不到编写if语句的方法,它有意义。
也许对我来说,在程序上完成这个任务更有意义,而不仅仅是依靠直接的Cypher查询,但我希望保持简单,并只在Cypher中完成它。
以下是一些示例,以澄清我想要做的事情。
示例1:
Node 1: firstname "John" middlename "Patrick" lastname "Smith"
Node 2: firstname "J" middlename "P" lastname "Smith"
Node 3: firstname "J" middlename "Q" lastname "Smith"
Node 4: firstname "J" lastname "Smith"
我需要一条查询语句,可以返回节点1、2和4作为“匹配项”。
示例2:
Node 1: firstname "Jane" lastname "Smith"
Node 2: firstname "J" middlename "P" lastname "Smith"
Node 3: firstname "J" middlename "Q" lastname "Smith"
Node 4: firstname "J" lastname "Smith"
这里,我想要所有4个节点,因为“canonical”名称没有中间名。
EXISTS
并因此被投票反对。 - joslinm