我有一個很大的圖,其中有代表人的節點。他們都有名字和姓氏屬性,有些具有中間名屬性。我正在尋找可能代表同一個人的節點,所以我正在查看不同的名稱排列。我目前正在比較姓氏和名字的第一個首字母[某些節點只有首字母],但不知道如何檢測中間名是否存在。Neo4j Cypher - 比較屬性值,如果它們存在?
我當前的查詢是:
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
我的理解是,可選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個節點,因爲 '規範' 的名字沒有一箇中間名。
您可能希望更清楚地闡明什麼是你現在要做的,因爲「無法弄清楚如何測試中間名如果它們存在「導致我告訴你使用'EXISTS'並得到它的贊成票。 – joslinm
謝謝,希望我的擴展示例更好地闡明。 FWIW,我沒有讓你失望。對我來說,你的評論是一個跡象,我沒有清楚地解釋我試圖解決的問題。 – betseyb