2012-12-11 19 views
39

Sembra che LIKE non sia supportato nelle query di Cypher.clausola LIKE in CYPHER Query

C'è qualche altro costrutto che eseguirà lo stesso compito?

Per esempio:

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

Il refcard è un fatto utile per segnalibro: http://neo4j.com/docs/cypher-refcard/current/ elenca tutti supportati stringa corrispondente operatori, per esempio. –

risposta

49

utilizzando le espressioni regolari: http://neo4j.com/docs/developer-manual/current/#query-where-regex

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

Ero preoccupato che regex potesse essere la risposta. Grida;) Tuttavia, lo rende più potente di un semplice LIKE – johnc

+2

sì, sono anche preoccupato per regexp ma è il modo diretto ora. ma puoi ancora usare un indice lucene come questo: 'start n = node: your_index ('proprietà: * SUBSTRING *') restituisce n.name, n;' – ulkas

+4

e usa i parametri invece dei valori letterali: 'start n = node (*) dove n.Nome = ~ {like} restituisce n.Name, n; 'params: {" come ":". * SUBSTRING. * "}, anche node (*) come hint della clausola iniziale in un non grafico use-case, quindi usa il suggerimento di ricerca indice di ulkas –

16

A partire dalla versione 2.0, la sintassi preferita utilizza MATCH.

ad es.

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

ma '= ~ 'PRJ \ d'' sembra non funzionare – ekkis

+0

non importa. '= ~ ​​'PRJ \\ d'' funziona bene. whacks ha bisogno di scappare – ekkis

13

Se si vuole rendere case insensitive

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

sì ma le prestazioni fanno schifo! – ekkis

+0

Grazie mille :) – JochemQuery

5

No Le espressioni regolari necessari:

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

Vai a the cypher refcard e scorrere fino alla sezione predicati. Troverai questa e altre cose utili.

Vuoi maiuscole/minuscole? Conversione in minuscolo:

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

purtroppo, è sensibile alle maiuscole e minuscole e non esiste la versione senza distinzione tra maiuscole e minuscole. ugh! – ekkis

+0

@ekkis risolto, vedi modifica. –

+0

sì, funzionerà, così come '= ~ '(? I) sottostringa'' ma non ha un buon rendimento. il più basso() impedisce l'uso dell'indice, quindi sui big data si bloccherà. Ho una richiesta di funzionalità aperta qui: https://github.com/neo4j/neo4j/issues/9450 – ekkis

Problemi correlati