不区分大小写的参数匹配
Case insensitive parameter match
我想匹配宠物和它们的主人。目前我这样做:
MATCH (n:Person) WITH n MATCH (p:Pet{owner: n.name})
RETURN *
这有效,但没有找到我的所有结果。
无法找到我的所有结果的原因是 p.owner
和 n.name
之间的字母大小写并不总是匹配。 Person name
可以是大写或小写,Pet owner
可以是大写或小写。在这种情况下,在数据库输入之前没有一致性和清理数据不是一个选项。
我需要的是在忽略任何大小写问题的同时匹配 Persons 和 Pets,最好是将 p.owner
和 n.name
.
都小写
我尝试使用 toLower()
,但我无法在查询中将 owner
小写(语法错误)。
你有没有尝试过类似的东西:
MATCH (n:Person)
WITH n
MATCH (p:Pet)
WHERE toLower(n.name) = toLower(p.owner)
RETURN *
选项 1 - 在导入数据库时将相关字符串转换为小写
这将允许您继续使用现有的查询并减少处理。
注意:以下查询是您查询的更简洁形式。此外,您应该考虑在 :Pet(owner)
上创建一个 index 以完全优化查询。
MATCH (n:Person), (p:Pet {owner: n.name})
RETURN *
选项 2 - 使用不区分大小写的正则表达式
如果由于某种原因您无法更改导入的字符串,那么您可以使用 Cypher 对 case-insensitive regular expressions 的支持,如:
MATCH (n:Person), (p:Pet)
WHERE n.name =~ '(?i)' + p.owner
RETURN *
此选项比选项 1 显着慢,因为它无法利用索引,并且需要对每一对[= Person
和 Pet
个节点的 31=]。
我想匹配宠物和它们的主人。目前我这样做:
MATCH (n:Person) WITH n MATCH (p:Pet{owner: n.name})
RETURN *
这有效,但没有找到我的所有结果。
无法找到我的所有结果的原因是 p.owner
和 n.name
之间的字母大小写并不总是匹配。 Person name
可以是大写或小写,Pet owner
可以是大写或小写。在这种情况下,在数据库输入之前没有一致性和清理数据不是一个选项。
我需要的是在忽略任何大小写问题的同时匹配 Persons 和 Pets,最好是将 p.owner
和 n.name
.
我尝试使用 toLower()
,但我无法在查询中将 owner
小写(语法错误)。
你有没有尝试过类似的东西:
MATCH (n:Person)
WITH n
MATCH (p:Pet)
WHERE toLower(n.name) = toLower(p.owner)
RETURN *
选项 1 - 在导入数据库时将相关字符串转换为小写
这将允许您继续使用现有的查询并减少处理。
注意:以下查询是您查询的更简洁形式。此外,您应该考虑在 :Pet(owner)
上创建一个 index 以完全优化查询。
MATCH (n:Person), (p:Pet {owner: n.name})
RETURN *
选项 2 - 使用不区分大小写的正则表达式
如果由于某种原因您无法更改导入的字符串,那么您可以使用 Cypher 对 case-insensitive regular expressions 的支持,如:
MATCH (n:Person), (p:Pet)
WHERE n.name =~ '(?i)' + p.owner
RETURN *
此选项比选项 1 显着慢,因为它无法利用索引,并且需要对每一对[= Person
和 Pet
个节点的 31=]。