2012-11-18 9 views
24

Ist es möglich, eine case-insensitive cipher Abfrage auf Neo4j auszuführen?Ausführen einer case-insensitive cypher Abfrage

Versuchen Sie das mal: http://console.neo4j.org/

Als ich in diese Art:

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

es eine Zeile zurückgibt. Aber wenn ich folgendes eintippe:

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

es gibt nichts zurück; weil der Name als "Neo" gespeichert ist. Gibt es eine einfache Möglichkeit, Abfragen ohne Berücksichtigung der Groß- und Kleinschreibung auszuführen?

Antwort

34

Ja, von Groß- und Kleinschreibung mit regulären Ausdrücken:

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

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

+2

Link ist jetzt tot. Es wird nach [http://neo4j.com/docs/developer-manual/current/#query-general](http://neo4j.com/docs/developer-manual/current/#query-general) verschoben. Obwohl Ihre Antwort die Lösung enthält, ist es besser, den Link zu aktualisieren, damit jemand am Ende darauf klicken kann. – Gandalf

+0

= ~ Operator verwendet keine Indizes – Abhi

+1

Wie kann ich Parameter hier übergeben? '(? i) $ param'' und' '(?!)' + $ param' funktioniert nicht – vladkras

7

Eine andere Möglichkeit wäre:

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

Und wenn Sie die Neo4j Client verwenden (.NET):

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

Diese Lösung ist einfacher für Parameter anzuwenden – thangdc94