2012-12-11 5 views
39

Cypher 쿼리에서 LIKE가 지원되지 않는 것으로 보입니다.CYPHER 쿼리의 LIKE 절

동일한 작업을 수행하는 다른 구조가 있습니까? 정규 표현식을 사용

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

refcard는 북마크에 정말 편리한 것입니다 : http://neo4j.com/docs/cypher-refcard/current/ 그것은 모든 예를 들어 사업자 일치하는 문자열을 지원 나열합니다. –

답변

49

: 예컨대

http://neo4j.com/docs/developer-manual/current/#query-where-regex

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

나는 정규 표현식이 답이 될지 걱정했다. Groans;) 그래도 단순한 것보다 더 강력 해졌습니다. – johnc

+2

예, 저는 regexp에 대해서도 걱정이됩니다 만 지금은 직접적인 방법입니다. 'start n = node : your_index ('property : * SUBSTRING *')는 n.name, n;' – ulkas

+4

을 리턴하고 리터럴 값 대신에 매개 변수를 사용하십시오 :'start n = node (*). * "}, 노드 (*)는 시작 절로 비 그래프에서 힌트를 표시합니다. (*) 여기서 n.Name = ~ {like}는 n.Name을 반환합니다. - 케이스를 사용하고 오히려 사용 ulkas '인덱스 조회 제안 –

16

2.0 버전은 바람직한 MATCH 구문을 이용한다.

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

하지만'= ~ 'PRJ \''는 작동하지 않는 것 같습니다 – ekkis

+0

. '= ~ ​​'PRJ \\ d'는 잘 작동합니다. 울부 짖음은 도망쳐 야합니다. – ekkis

13

당신이 대소 문자를 구분 필요

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

네,하지만 성능이 좋습니다! – ekkis

+0

대단히 감사합니다. :) – JochemQuery

5

없음으로 정규 표현식 확인하려면 : the cypher refcard

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

이동하여 술어 부분을 아래로 스크롤합니다. 당신은 이것과 다른 유용한 것들을 발견 할 것입니다.

대소 문자를 구별하지 않으십니까? 소문자로 변환 :

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

슬프게도 대소 문자를 구분하며 대소 문자를 구분하지 않습니다. 우! – ekkis

+0

@ekkis fixed, 편집 참조. –

+0

예,'= ~ '(? i) substring''과 같이 작동하지만 잘 수행되지 않습니다. lower()는 인덱스 사용을 막아 큰 데이터에서 그냥 멈 춥니 다. 여기에 공개 기능 요청이 있습니다. https://github.com/neo4j/neo4j/issues/9450 – ekkis