2012-11-18 3 views
24

neo4j에서 대소 문자를 구분하지 않는 Cypher 쿼리를 실행할 수 있습니까?대소 문자를 구분하지 않는 Cypher 쿼리 실행

것을보십시오 : http://console.neo4j.org/

나는이에 입력하면 : 그것은 하나 개의 행을 반환

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

. 그러나이 형식을 입력하면 :

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

아무 것도 반환하지 않습니다. 이름이 "네오"로 저장 되었기 때문입니다. 대/소문자를 구분하지 않는 쿼리를 실행할 수있는 간단한 방법이 있습니까?

답변

34

예, 문자를 구분 정규 표현식 케이스를 사용하여 :

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

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

+2

링크가 죽었습니다. 그것은 [http://neo4j.com/docs/developer-manual/current/#query-general](http://neo4j.com/docs/developer-manual/current/#query-general)로 이동합니다. 답변에 해결책이 포함되어 있지만 누군가를위한 링크를 업데이트하면 더 좋은 결과를 얻을 수 있습니다. – Gandalf

+0

= ~ 연산자는 인덱스를 사용하지 않습니다. – Abhi

+1

어떻게 매개 변수를 전달할 수 있습니까? $ param '과''(?!) '+ $ param'이 작동하지 않습니다 – vladkras

7

을 또 다른 방법은 다음과 같습니다

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

그리고 당신이 Neo4j 클라이언트 (.NET)을 사용하는 경우 :

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

이 솔루션은 매개 변수를 적용하는 것이 더 쉽습니다 – thangdc94

관련 문제