Neo4j 似乎无法找到简单路径模式的匹配项

Neo4j can't seem to find a match for a simple path pattern when it should

我正在尝试一些 neo4j (3.4.9),我有一个我认为应该有效但奇怪的是无效的查询。

前两个查询有效(如图所示)。他们的结果向我建议,第三个应该至少 return 一个结果,但它 returns none.

为什么第三个查询没有像我预期的那样工作?

neo4j> MATCH (s:Station {name: "Old Street"})-[:IN_REGION]->(r:Region)
       RETURN r.name,s.name;
+-------------------------+
| r.name   | S.name       |
+-------------------------+
| "London" | "Old Street" |
+-------------------------+

1 row available after 24 ms, consumed after another 3 ms
neo4j> MATCH (s:Station {name: "Limehouse"})-[:IN_REGION]->(r:Region)    
       RETURN r.name,s.name;
+------------------------+
| r.name   | s.name      |
+------------------------+
| "London" | "Limehouse" |
+------------------------+

1 row available after 22 ms, consumed after another 3 ms
neo4j> MATCH (a:Station {name: "Old Street"})-[:IN_REGION]->(r:Region)<-[:IN_REGION]-(b:Station)
       RETURN r.name,a.name,b.name;
0 rows available after 41 ms, consumed after another 2 ms
neo4j>

我希望(至少)看到 "Old Street" - "London" - "Limehouse" 匹配 returned.

谢谢。

-- 写下并接受了Dave Bennett和Guy Coder提出的方案

问题在于我加载数据的方式。

之前,我使用以下方式加载它:

使用 HEADERS 从 "file:///estimates-of-station-usage-2016-17.csv" AS 行加载 CSV 创造东西 然而,这意味着许多节点被复制并具有相同的属性,因此它们是不同的但不能立即区分。

为避免此问题,仅对您知道唯一的节点使用 CREATE,然后使用 MERGE 创建将 link 其他节点在一起的节点。

我的 CSV 加载代码更改为:

LOAD CSV WITH HEADERS FROM "file:///estimates-of-station-usage-2016-17.csv" AS line
CREATE (s:Station {name: line.`Station Name` , entriesAndExits: toInteger(replace(trim(line.`1617 Entries & Exits`), ",", "")) })
MERGE (fo:FacilityOwner {name: coalesce(line.`Station Facility Owner`, "Unknown")})
MERGE (r:Region {name: coalesce(line.Region, "Unknown")})
MERGE (la:LocalAuthority {name: coalesce(line.`Local Authority`, "Unknown")})
MERGE (fo)-[:OWNS]->(s)
MERGE (la)-[:RESPONSIBLE_FOR]->(s)
MERGE (la)-[:IN]->(r)
MERGE (s)-[:IN]->(r)
MERGE (fo)-[:OPERATES_IN]->(r)
RETURN s,r,la,fo;

MATCH (s:Station)
WHERE NOT exists(s.name) OR NOT exists(s.entriesAndExits)
DETACH DELETE s
RETURN s;

MATCH (r:Region)
WHERE r.name = "Unknown"
DETACH DELETE r
RETURN r;

MATCH (fo:FacilityOwner)
WHERE fo.name = "Unknown"
DETACH DELETE fo
RETURN fo;

MATCH (la:LocalAuthority)
WHERE la.name = "Unknown"
DETACH DELETE la
RETURN la;

-- 感谢 Dave Bennett 和 Guy Coder 的有益评论。

有关 CSV 数据的附注:

CSV文件中的字段都是简单的字符串。在解析站的 entriesAndExits 计数时有很多代码噪音,因为该列的条目是格式化为字符串的数字,包括多余的空格和逗号以分隔 3 位数字组,例如,“ 546,123 ”。