Neo4j 运行不区分大小写的cypher查询

Neo4j 运行不区分大小写的cypher查询,neo4j,case-insensitive,cypher,Neo4j,Case Insensitive,Cypher,是否可以在neo4j上运行不区分大小写的密码查询 试试看: 当我输入以下内容时: start n=node(*) match n-[]->m where (m.name="Neo") return m start n=node(*) match n-[]->m where (m.name="neo") return m 它返回一行。但当我输入以下内容时: start n=node(*) match n-[]->m where (m.name="Neo")

是否可以在neo4j上运行不区分大小写的密码查询

试试看:

当我输入以下内容时:

start n=node(*) 
match n-[]->m 
where (m.name="Neo") 
return m
start n=node(*) 
match n-[]->m 
where (m.name="neo") 
return m
它返回一行。但当我输入以下内容时:

start n=node(*) 
match n-[]->m 
where (m.name="Neo") 
return m
start n=node(*) 
match n-[]->m 
where (m.name="neo") 
return m

它不返回任何东西;因为名称保存为“Neo”。有没有一种简单的方法可以运行不区分大小写的查询?

是的,通过使用不区分大小写的正则表达式:

WHERE m.name =~ '(?i)neo'
另一种方法是:

WHERE LOWER(m.Name) = LOWER("Neo")
如果您使用的是Neo4j客户端(.NET):

Client.Cypher.Match(((m:Entity)”)
.Where(“LOWER(m.Name)=LOWER({Name})”)
.WithParam(“名称”,inputName)
.Return(m=>m.As())
.结果
.FirstOrDefault();

如果有人在研究如何使用参数执行此操作,我会这样做

query = "{}{}{}".format('Match (n) WHERE n.pageName =~ "'"(?i)", name, '" RETURN n')

“name”是变量或参数

您可以将参数传递给不区分大小写的正则表达式,如:


其中m.name=~'(?i)({param})

=~运算符不使用IndexShow我可以在此处传递参数吗
'(?i)$param'
'(?!)'+$param
不起作用。我认为您必须使用整个正则表达式字符串作为参数。此解决方案更易于应用parameter@rotgers使用LOWER()函数不会影响在实际字符串上定义的索引查找吗?@Partha,不知道,我已经一年多没有接触过Neo4j了。FYI-LOWER()已替换为toLower()。你能解释一下它是如何工作的,甚至是如何读取它的吗?
“{}{}{}{}”
看起来像占位符,
.format
将按顺序接收参数或替换占位符。可读性肯定是这里的一个问题,但更大的问题似乎是这只是字符串连接而不是参数化。所以在中,我可以做这个
$”匹配(n),其中n.pageName={(?I)}name返回n
(C#字符串插值)