有没有办法在Cypher(Neo4J)中做一个不区分大小写的MERGE?
我正在创建一个我能够从一组文档中提取的实体图,并希望合并多个文档中相同的实体(接受同名的风险并不意味着它是相同的实体!)。问题是案件可能因文件而异。
目前,我正在使用MERGE语法创建合并节点,但它对大小写的差异很敏感。如何执行不区分大小写的合并?
答案 0 :(得分:3)
没有直接的方法,但你可以尝试下面的东西.MERGE是为模式匹配而制作的,不同情况的标签构成不同的模式
MERGE (a:Crew123)
WITH a,labels(a) AS t
LIMIT 1
MATCH (n)
WHERE [l IN labels(n)
WHERE lower(l)=lower(t[0])] AND a <> n
WITH a,collect(n) AS s
FOREACH (x IN s |
DELETE a)
RETURN *
上述查询将为您提供ERROR
但如果存在类似标签,它将删除新创建的节点。您可以在MERGE子句中添加其他模式。如果没有类似的标签,它将成功运行。
同样,这只是一个不允许新的类似标签的工作。
答案 1 :(得分:1)
如果数据来自CSV或类似的源(参数),您可以使用专用的,一致的case属性进行合并,并单独设置原始值。
e.g。
CREATE CONSTRAINT ON (u:User) ASSERT u.iname IS UNIQUE;
LOAD CSV WITH HEADERS FROM "http://some/url" AS line
WITH line, lower(line.name) as iname
MERGE (u:User {iname:iname}) ON CREATE SET u.name = line.name;
答案 2 :(得分:0)
我们发现的最佳解决方案是更改我们的架构,以包含一个标记的节点,该节点包含我们可以合并的上限值,同时仍保留原始模式的案例信息。例如。 (OriginalCase) - [大写的] - GT;(ORIGINALCASE)