40
votes

Is it possible to run a case-insensitive cypher query on neo4j?

Try that: http://console.neo4j.org/

When I type into this:

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

it returns one row. But when I type into this:

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

it does not return anything; because the name is saved as "Neo". Is there a simple way to run case-insensitive queries?

4

4 Answers

54
votes
10
votes

Another way would be:

WHERE LOWER(m.Name) = LOWER("Neo")

And if you are using the Neo4j Client (.NET):

Client.Cypher.Match("(m:Entity)")
    .Where("LOWER(m.Name) = LOWER({name})")
    .WithParam("name", inputName)
    .Return(m => m.As<Entity>())
    .Results
    .FirstOrDefault();
2
votes

If anybody is looking on how to do this with a parameter, I managed to do it like this.

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

and "name" is the variable or your parameter

0
votes

You can pass a parameter to the case insensitive regular expression like:

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