프로젝트를 진행하면서 BTS로 _, %로 검색시 검색이 제대로 안된다는 내용이 등록되었다.
해당 내용을 해결하기 위해 구글링 하던 도중 아래와 같은 내용을 찾게 되었다.

http://okjsp.pe.kr/seq/2372

'_', '%'와 같은 문자들이 검색을 하기 위한 wild 문자로 사용되지 않고 리터럴 문자로 사용되기 위해서는 뒤에 escape '\' 와 같이 사용해 주어야 한다는 것이다.
즉 다음과 같이 사용하면 되는 것이다.

LIKE '%검색어\_\%% escape '\'

사용하고 있는 DB는 CUBRID 였으며, 위와 같이 할 경우 잘 동작 되었다.

위 내용을 수정하면서 SQL Injection 위험이 있던 '%$keyword$%' 부분도 '%#keyworkd#%'로 바꾸게 되었다.
하지만 이 과정 중에 ibatis가 자체적으로 #keyword#를 'keyword'로 바꾸기 때문에 결과에서는 '%'keyword'%'가 되므로 수정해 주어야 했다.
MySQL이라면 CONCAT과 같은 함수를 써서 다음과 같이 하면 된다.

LIKE CONCAT('%', #keyword# '%')

하지만 CUBRID에는 CONCAT 함수가 없다. 관련해서 또다시 검색해 보니 Java에서 String을 이어 붙이기 하는 것과 같은 방법을 사용하면 되었다.
즉 CUBRID에서는 다음과 같이 하면 된다.

LIKE '%' + #keyword# + '%'

오늘도 삽질을 통해 또 하나의 깨달음을 얻게 되었다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. ㅋㅋㅋ, 지금 저한테 필요한 내용 ㅋㅋㅋ
secret
오늘 올린 현대카드 패러디가 벌써 수집됬네요.
리퍼러 검색 중 네이버에서 들어온 링크를 우연히 봤는데...
오늘 올린 글이 벌써 인덱싱 되서 벌써 타고 들어오다니 ^^
많은 분들이 네이버 갬색에 대해서 불만을 가지고 있는 듯 한데,
첫눈의 기술력, 그리고 국내 검색관련해서 가장 오래된 경력을 가지고 있는 이준호 CTO의 능력을 그리 만만하게 볼 것은 아닌 듯 합니다.

사실 '네이버 성공 신화의 비밀' 책을 보니, 엠파스의 '자연어 검색' 기술도 이준호 CTO가 가지고 있다고 하더군요.
왜 엠파스에 그것이 갔는지는 모르겠지만 ^^;;
어째든 아래는 캡쳐 화면입니다.



검색 결과

검색 결과


위 결과로 나온 [포스트]
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret