Neo4J Cypher - Case Insensitive MERGE

时间:2014-07-04 12:53:36

标签: neo4j cypher case-insensitive

有没有办法在Cypher(Neo4J)中做一个不区分大小写的MERGE?

我正在创建一个我能够从一组文档中提取的实体图,并希望合并多个文档中相同的实体(接受同名的风险并不意味着它是相同的实体!)。问题是案件可能因文件而异。

目前,我正在使用MERGE语法创建合并节点,但它对大小写的差异很敏感。如何执行不区分大小写的合并?

3 个答案:

答案 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)