Running a case-insensitive cypher query

2019-02-04 01:13发布

问题:

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?

回答1:

Yes, by using case insensitive regular expressions:

WHERE m.name =~ '(?i)neo'

http://neo4j.com/docs/developer-manual/current/cypher/clauses/where/#where-case-insensitive-regular-expressions



回答2:

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();


回答3:

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