Neo4j 不区分大小写的参数匹配

Neo4j 不区分大小写的参数匹配,neo4j,cypher,Neo4j,Cypher,我想匹配宠物和它们的主人。目前我有: MATCH (n:Person) WITH n MATCH (p:Pet{owner: n.name}) RETURN * 这是可行的,但没有找到我所有的结果 它找不到我所有的结果是因为p.owner和n.name之间的字母大小写并不总是匹配。人物姓名可以是大写或小写,宠物主人可以是大写或小写。不存在一致性,在此场景中,在数据库输入之前清理数据不是一个选项 我需要的是在忽略任何大小写问题的情况下匹配人和宠物,理想的做法是将p.owner和n.name都小写

我想匹配宠物和它们的主人。目前我有:

MATCH (n:Person) WITH n MATCH (p:Pet{owner: n.name})
RETURN *
这是可行的,但没有找到我所有的结果

它找不到我所有的结果是因为
p.owner
n.name
之间的字母大小写并不总是匹配。人物姓名可以是大写或小写,宠物主人可以是大写或小写。不存在一致性,在此场景中,在数据库输入之前清理数据不是一个选项

我需要的是在忽略任何大小写问题的情况下匹配人和宠物,理想的做法是将
p.owner
n.name
都小写


我尝试使用
toLower()
,但这不允许我将查询中的
所有者
小写(语法错误)。

您是否尝试了以下操作:

MATCH (n:Person) 
WITH n 
MATCH (p:Pet)
WHERE toLower(n.name) = toLower(p.owner)
RETURN *

你有没有试过这样的方法:

MATCH (n:Person) 
WITH n 
MATCH (p:Pet)
WHERE toLower(n.name) = toLower(p.owner)
RETURN *
选项1-在导入数据库时将相关字符串转换为小写 这将允许您以较少的处理量继续使用现有查询

注意:下面的查询是您的查询的更简洁的形式。此外,您应该考虑创建一个ON<代码>:PET(所有者)< /> >以完全优化查询。

MATCH (n:Person), (p:Pet {owner: n.name})
RETURN *
选项2-使用不区分大小写的正则表达式 如果由于某种原因无法更改导入的字符串,则可以使用Cypher对的支持,如中所示:

此选项将比选项1慢得多,因为它无法利用索引,并且需要对每对
Person
Pet
节点进行昂贵的文本处理。

选项1-在导入数据库时将相关字符串转换为小写 这将允许您以较少的处理量继续使用现有查询

注意:下面的查询是您的查询的更简洁的形式。此外,您应该考虑创建一个ON<代码>:PET(所有者)< /> >以完全优化查询。

MATCH (n:Person), (p:Pet {owner: n.name})
RETURN *
选项2-使用不区分大小写的正则表达式 如果由于某种原因无法更改导入的字符串,则可以使用Cypher对的支持,如中所示:

此选项将比选项1慢得多,因为它无法利用索引,并且需要对每对
个人
宠物
节点进行昂贵的文本处理