2012-11-18 11 views
24

Czy jest możliwe uruchomienie kwerendy niewrażliwe na wielkość liter na neo4j?Uruchamianie kwerendy niewrażliwe na wielkość liter

Spróbuj tego: http://console.neo4j.org/

Po wpisaniu w to:

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

zwraca jeden wiersz. Ale kiedy piszę:

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

to nic nie zwraca; ponieważ nazwa jest zapisana jako "Neo". Czy istnieje prosty sposób na uruchamianie zapytań niewrażliwych na wielkość liter?

Odpowiedz

34

Tak, za pomocą wielkość liter ma znaczenie wyrażeń regularnych:

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

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

+2

Link jest teraz martwy. Przenosi się do [http://neo4j.com/docs/developer-manual/current/#query-general](http://neo4j.com/docs/developer-manual/current/#query-general). Chociaż twoja odpowiedź zawiera rozwiązanie, lepiej będzie zaktualizować link, aby ktoś kliknął na niego. – Gandalf

+0

= ~ operator nie używa indeksów – Abhi

+1

jak mogę przekazać tutaj parametr? ''(? i) $ param'' i'' (?!) '+ $ param' nie działa – vladkras

7

Innym sposobem byłoby:

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

A jeśli używasz klienta Neo4j (.NET):

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

To rozwiązanie łatwiej jest zastosować do parametru – thangdc94

Powiązane problemy