듀에코르다의 익스트림 네가티브

Sphinx, Thinking_sphinx 한글 검색을 위한 charset_table.. 대략 1 개월 전

Rails 에서 검색을 위해 solr (acts_as_solr), xapian (acts_as_xapian) 을 사용하다가 몇 주 전에 sphinx 로 바꿨다.


장점은 한글 검색이 잘 된다는 것이고,


단점은 프로세스를 별도로 띄워야한다는 점과 (solr 에서 xapian으로 넘어간 이유였는데...) 인덱스를 수동으로 갱신해야한다는 점. (뭐, 누군가에겐 장점일 수도..)


아무튼, 홈페이지에서 필요한 대부분의 정보를 구할 수 있다.


내가 사용하면서 겪었던 2가지의 문제만 짚어보자.


1. 인덱스 필드 이름이 body 일 때 에러가 난다.

그렇다. 이런 거지같은 일이 있다. 시간이 나면 소스를 수정하여 thinking_sphinx 에 기여하도록 하라.


2. 한글 검색(cjk)을 위한 charset_table


sphinx 에서 한글을 검색하려면 Sphinx - Unicode Character Set Tables 페이지에 있는 값을 sphinx.conf 에 charset_table 로 설정하면 된다.


문제는 한 라인이 지나치게 길 경우 (정확히 몇 자까지는 모르겠다) 에러가 난다는 것이다. 이를 피하기 위해선 라인 끝에 \ (역 슬래쉬) 를 주고 개행하면서 값을 입력하면 된다.


그런데 thinking_sphinx 는 sphinx.yml 에 설정값을 적어놓고 인덱스가 빌드될 때 마다 자동으로 config 파일을 생성시킨다. 문제는 역슬래쉬와 개행으로 만들어놓은 charset_table 값이 실제 설정파일에는 역슬래쉬없이 한 라인으로 생성된다는 것이다! 이런 망할 -_-;;


자, 잠깐 해결책 생각해보면 yml 을 읽어서 conf 파일을 만들어내는 thinking_sphinx 소스를 찾아 적당히 수정해주는 방법이 있을 것이고, 역슬래쉬와 개행을 살려서 conf 파일을 만들어낼 수 있도록 yml 파일을 잘 만드는 방법이 있겠다.


둘 다 쉬운 작업이겠지만, 첫 번째 방법은 소스를 핵해야하니 내 수정본이 thinking_sphinx 마스터 소스에 적용되길 바라거나 소스 업데이트 때 마다 매번 작업하던가 해야하고.. 두번째는 뭐 한번 해놓으면 끝이니 당연히 두번째 방법으로 가자.


일단 결론적으로 아래와 같이 입력하면 된다.


=== sphinx.yml ===

...

charset_table: "0..9, A..Z->a..z, _, a..z, \\\n \
U+F900->U+8C48, U+F901->U+66F4, U+F902->U+8ECA, U+F903->U+8CC8, \\\n \

U+F904->U+6ED1, U+F905->U+4E32, U+F906->U+53E5, U+F907->U+9F9C, \\\n \

...

U+A000..U+A48C, U+A492..U+A4C6"

...

==============


음.... 이것 때문에 한 시간넘게 고생했던게 좀 쪽팔리긴 하다. ㅋㅋㅋ


가까운 글

Games
Junks
Search
Recent Articles
Recent Comments
Blogroll