2014-09-29 4 views
0

Neo4j에서 우리는 mysql 질의 을 "like"Neo4j에서 정확한 단어 일치를 수행하는 방법은 무엇입니까?

으로 수행 할 수 있습니다. 노드 "temp"의 열이 "col"이고 값이 "1945 년 세계 대전이었습니다."; 우리가 "법과"

어디에서 검색하는 경우

쿼리는 다음 결과를 오는

temp.col =~ '(?i).*'. $search_value . '.*' 

입니다. 그러나 나는 사건을 바꾸면서 세상을 찾았을 때만 결과를 얻길 바란다.

정확한 단어 일치를 수행하는 방법은 무엇입니까?

즉 문자열을 검색하면 단어의 시작과 끝 부분에 공백이나 문자가 없어야합니다.

+0

Neo4j에서 "in-sensative matching"을 위해 "(? i)"가 사용됩니다. ". *"는 MySQL에서 "%"로 사용됩니다. 문자열과 하위 문자열이 아닌 정확한 단어 일치를 원합니다. @nhahtdh –

+0

당신의 질문은 조금 혼란 스럽습니다 :'wor'로 검색 할 때'world'가 결과로 나타나기를 원하십니까? – nhahtdh

+0

나는 "wor"결과로 검색해서는 안된다고 말했다. 그러나 "세계"로 검색 할 때 결과가 나타납니다. @nhahtdh –

답변

1
=~ '(?i).*'. $search_value . '.*' 

= ~ = 정규식 검색 (? I) = 경우 insenstive . * = 일치 아무것도 $ search_value = 귀하의 문자열 . * = 일치 아무것도

당신은 전체 단어를 일치 시키려면

, 당신은 케이스를 일치 시키려면, 그 전체 단어가 중간 문장을 표시 할 수 있다면 당신은 시도 할 수 :

=~'.*\\b' . $search_value . '\\b.*' 

\b는 단어 경계 정규이다.

업데이트 : "\\b"escaping in for regular expressions에는 이중 슬래시가 필요합니다.

+0

'java string parser' 코드는 PHP에 있습니다. – nhahtdh

+0

확실한 @nhahtdh, 나는 그것을 볼 수있다. 그러나 질의는 어디에서 실행될 것인가? – JohnMark13

+0

쿼리가 어디에서 실행되는지에 관계없이 문자열 리터럴은 PHP에서 구문 분석됩니다. 다음 레벨은 정규식 엔진에서 파싱됩니다. – nhahtdh

관련 문제