2016-03-29 7 views
0

Ich erhalte eine Benutzereingabe keyword und möchte damit meine Datenbank durchsuchen. Ich eine Abfrage erstellt, die etwa wie folgt aussieht:neo4j Flucht für reguläre Ausdrücke

db.execute("MATCH (n:User) WHERE n.firstname CONTAINS {keyword} OR n.lastname CONTAINS {keyword} RETURN n.username", params);

aber dieser Fall ist nicht empfindlich, also dachte ich manuell den Ausdruck zu bauen und mit regulären Ausdrücken, Art wie folgt:

db.execute("MATCH (n:User) WHERE n.firstname =~ '(?i).*" + keyword + ".*' OR n.lastname =~ '(?i).*" + keyword + ".*' RETURN n.username");

Ich suche entweder nach einer Funktion zum Ausschließen der Regex oder nach einer besseren Lösung, um die Abfrage von der Groß- und Kleinschreibung unabhängig zu machen. Irgendwelche Ideen?

Antwort

1

Ich würde vorschlagen, die Eigenschaften als alle Kleinbuchstaben (oder Großbuchstaben) speichern und dann mit der Cypher lower() Funktion Benutzereingaben in Kleinbuchstaben zum Vergleich zu konvertieren.

hinzufügen Klein Name Eigenschaften

MATCH (n:User) 
SET n.lowerFirstName = lower(n.firstname), 
    n.lowerLastName = lower(n.lastname) 

kleingeschrieben finden Spiele basierend auf Benutzereingaben

db.execute("MATCH (n:User) WHERE n.lowerFirstName CONTAINS lower({keyword}) OR n.lowerLastName CONTAINS lower({keyword}) RETURN n.username", params); 
+0

Das macht das Problem lösen, aber ich ziehe das Hinzufügen 'niedriger()' sowohl Seiten des CONTAINS-Operanden statt Konsistenz für ein anderes Paar von Variablen zu halten. Danke für die einfache Lösung! – Hetzroni