2012-12-11 9 views
39

Es scheint, dass LIKE in Cypher-Abfragen nicht unterstützt wird.LIKE-Klausel in CYPHER Abfrage

Gibt es ein anderes Konstrukt, das die gleiche Aufgabe ausführen würde?

Zum Beispiel:

start n = node(*) where n.Name LIKE('%SUBSTRING%') return n.Name, n; 
+1

Die refcard ist eine wirklich praktische Sache zu den Favoriten hinzufügen: http://neo4j.com/docs/cypher-refcard/current/ Alles Zeichenfolge unterstützt Listen Operatoren zum Beispiel entsprechen. –

Antwort

49

mit regulären Ausdrücken: http://neo4j.com/docs/developer-manual/current/#query-where-regex

start n = node(*) where n.Name =~ '.*SUBSTRING.*' return n.Name, n; 
+3

Ich war besorgt Regex ist vielleicht die Antwort. Groans;) Trotzdem macht es es mächtiger als ein einfaches LIKE – johnc

+2

ja, ich mache mir auch Sorgen über regexp aber es ist jetzt der direkte Weg. Sie können aber immer noch einen Lucene-Index verwenden: 'start n = node: ihr_index ('property: * SUBSTRING *') return n.name, n;' – ulkas

+4

und bitte Parameter anstelle von literalen Werten verwenden: 'start n = node (*) wobei n.Name = ~ {like} return n.Name, n; 'params: {" like ":". * SUBSTRING. * "}, deutet auch node (*) als Start-Klausel auf ein Nicht-Diagramm hin Use-Case, dann lieber Ulkas Index-Lookup-Vorschlag –

16

Ab der Version 2.0 ist die bevorzugte Syntax verwendet MATCH.

z.B.

MATCH (n) where n.Name =~ '.*SUBSTRING.*' return n.Name, n; 
+0

aber '= ~ 'PRJ \' scheint nicht zu funktionieren – ekkis

+0

macht mir nichts aus. '= ~ ​​'PRJ \\ d'' funktioniert gut. Schläge müssen entkommen – ekkis

13

Wenn Sie es Groß- und Kleinschreibung

MATCH (n) WHERE n.name =~ '(?i).*SUBSTRING.*' RETURN n; 
+0

ja, aber Leistung saugt! – ekkis

+0

Vielen Dank :) – JochemQuery

5

Keine Regexps erforderlich machen:

start n = node(*) where n.Name contains "substring" return n.Name, n; 

Zum the cypher refcard und scrollen Sie zum Prädikate Abschnitt. Sie werden dies und andere nützliche Dinge finden.

Wollen Sie die Groß-/Kleinschreibung nicht beachten? Konvertieren in Kleinbuchstaben:

start n = node(*) where lower(n.Name) contains lower("substring") return n.Name, n; 
+0

Leider ist es Groß-und Kleinschreibung und es gibt keine case insensitive Version. Pfui! – ekkis

+0

@ekkis behoben, siehe Bearbeiten. –

+0

ja, das wird funktionieren, ebenso wie '= ~' (? I) substring'', aber es funktioniert nicht gut. Das lower() verhindert die Verwendung von Indizes, bei großen Daten wird es einfach hängen. Ich habe eine offene Feature-Anfrage hier: https://github.com/neo4j/neo4j/issues/9450 – ekkis