루씬으로 문서 인덱싱을 해 볼까나?

/*
일본에 있는 오픈검색님이 "Lucene 入門" 두권을 보내주었다. 하나는 내가 읽고 다른 하나는 싸이오블레이드가 읽을 책이다.
원래는 돈을 부치려고 했는데 굳이 마다 하여 한국에 오면 밤새 술잔으로 해결하기로 했다. 안그럼 일본으로 쳐들어 가면 더 좋은데..
책은 원래 손을 떠나면 돌아오기 힘든것이므로 빌려주긴 힘들겠다. 대신 보고 싶은 분은 오피스텔에 와서 하루종일 죽치면서 보시고 루씬 잡담도 할 수 있으면 오시라...(혹 일본어를 읽을 수 있으면 더 좋겠구먼^^)
루씬인액션은 훌륭한 각론 혹은 통론서이다.
Lucene 入門은 이것을 좀 더 체계적으로 정리한 입문서 + 실용서이다. 열공모드에 돌입하면 찾아내게될, 적용하기에 편한 잔잔한 부분과 실례까지 짚어주긴 했어도 그 깊이나 넓이는 루씬인액션을 따르진 못하는것 같다.(나은면도 있다.)
루씬인액션에 소개되지 못한 몇가지는 이 블로그에서 소개될수 있으리라...
엔진 개발자도 아니면서 검색에 관심이 많아 이렇게 수고해주시는 오픈검색님께 감사를 드린다. 검개그는 오래전부터 일본의 검색관련 동향에 관해 많은 부분은 오픈검색님으로 부터 듣고 있다.
*/

검색엔진의 고수들은 루씬을 보거나 사용하면 안되겠다.
왜냐하면 루씬을 보고 있으면 더이상 잘난체 할게 없어지기 때문이다.
아마도 고도의 천재가 아닌한 개인의 힘으로는 루씬보다 더 좋은 검색엔진을 만들기는 쉽지가 않을것이다.
루씬개발자는 무슨 얼어죽을 개발자? 루씬 앞에서는 누구나 루씬 사용자가 되어 버린다.
그냥 루씬 유저이다... 좀 더 발전하면 contributor 정도 되겠지..
(사실 검색의 퀄리티는 검색엔진의 퍼포먼스만 가지고 되는 것이 아니다. 네이버 봐라 훌륭한 검색결과 메이커들이 얼마나 많은가?^^)

나는 루씬을 검색엔진으로 보지 않기로 했다.
왜나하면 루씬앞에서 너무 쪽팔리기 때문이다.

그냥 루씬을 검색플래폼으로 삼기로 했다. OS 마냥 검색에 관련된 많은것들의 토양이 될만 하다.


검색엔진을 만드는 작업은 아주 쉽다.(?)
- 검색 대상이 있고
- 이 대상을 찾을 수 있도록 구조화 시키고
- 다시 이 구조화된 정보를 읽어서 원하는 검색대상을 찾으면 된다.^^

이 간단한 프로세스 하에 조금 더 빠르게, 조금 더 정확하게... 이렇게 하다 보니 시간가는줄 모른다.(해보면 2-3년은 후딱간다.)

세부적으로 나가면 알고리즘의 종류까지 따져야 하기 때문에 끝이 없어진다.
필요하신분들은 국내 유일한 검색엔진 커뮤니티 검개그(http://cafe.daum.net/irgroup)를 방문하시라. 거기엔 많은 노하우들이 숨어 있다.

서치(검색하는방법)는 다음으로 미루고
검색에 필요한 인덱싱은 대략 다음의 프로세스로 이루어 진다.
- 검색대상을 읽는다.

  이 검색대상은 DB던, 파일이던(TXT, HWP, XML, PDF, DOC...) 심지어는 메모리던 종류를 가리지 않는다.
  단 이 대상들은 어떠한 툴이나 방법에 의해 텍스트로 변환되어 해설할 수 있어야 한다.
  DB는 DB GATE같은 것들을 만들어 읽으면 되고 다른 파일들은 해당 파서들을 이용해서 읽으면 된다.
- 이렇게 TEXT로 변환된 대상들을 (형태소)분석이라는 작업을 통하여 색인어(키워드)들을 추출한다.
  이 분석기(Analyzer)는 검색의 목적에 따라 서로 다른 알고리즘과 결과를 낼 수 있다.
- 추출된 색인어를 가장 효율적으로 검색할 수 있게끔 구조화 시키고 파일(혹은 메모리)로 인덱스 한다.
  이거야 말로 능력에 따라, 알고리즘에 따라 여러가지 모양새를 가지게 된다.
그러면 끝이다 너무 간단한가?^^ 아님 허무한가?
루씬은 이렇게 허무한 결론을 내게 만든다.

사실 검색엔진이라는 것은 그동안 IT분야의 기본적인 개발자들 누구나 사용할 수 있는 플래폼이 존재하지 않았기 때문에
특정분야의 사람들에 대한 독점물인양 되어 왔다. 사실 그들도 제대로 된 걸 내놓지도 못하면서 말이다.

다른 이야기로 하면 그 플래폼만 존재한다면 누구나 검색이라는 세계에 빠져들수 있게 된다.
"콘텐츠가 존재하는 모든것에 검색이 있다."라는 명제를 실현할 수 있을날이 멀지 않았으리라.

인덱스 소스 설명은 하지 않고 엉뚱한 소리만 지껄인다?


그렇게 생각하면서 무언가 내놓길 원한다면 그것도 허무한 얘기다.

아주 훌륭한 샘플에 루씬에는 존재한다.
그리고 그 샘플을 Copy&Paste하여 많은 블로그에 올라가 있다. 안타까운건 그것들이 대부분 1.4버전이라는 것..
그냥 한번 돌려 보시라.. 자바를 모른다고 해도 그냥 하라는 대로 하고 돌려보시라..
욕심과 관심이 있음 금방 해답을 찾을 것이다.

이 간단한 프로세스를 루씬의 함수와 대략 접목하면 다음의 그림과 비스무리하게 나온다.
잠깐 짬내서 그린 그림이라 어설프긴 하다.


자신의 인덱싱 결과를 알고싶거나 간단한 검색 테스트를 해보려면 괜찮은 색인툴박스인 Luke를 http://www.getopt.org/luke/ 추천한다.
거기서 Launch Luke Now를 누르면 루씬 인덱스 결과와 검색의 대부분을 이용할 수 있다.


좀 더 자세히 설명하고 싶다만 현재는 그럴만큼 여유가 없다.
나중에 다 제대로 이해한 후에 종합본, 혹은 정리본에서 자세히 설명할 기회가 있으리라.
아님 직접 공부해 보면 금방 찾아내게 된다.

이 기초적인 인덱스와 더불이 더 고려해야 할일들은
- 문서(Document)나 필드에 대한 필요한 가중치 설정방법
- 색인속도향상을 위해 RAMDirectory와 FSDirectory와 병행해서 사용하는 법
- 두번째 방법도 모자라 더욱 빠르게 하기 위해 멀티쓰레드를 이용하여 인덱싱을 다중 처리하는 방법

이정도만 고려하면 좋은 인덱싱을 할수 있으리라 본다.
책과 인터넷에 다 있으니 읽어보면 된다. 굳이 중복설명해서 무엇하리요.. 쓸데없는 가비지만 양산할 뿐이지...

 


by typos | 2006/08/07 01:26 | 루씬 접목기 | 트랙백 | 덧글(10)
트랙백 주소 : http://lucene.egloos.com/tb/1386072
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by Gerald at 2006/08/07 15:29
루씬..저도 typos 님 싸이오블레이드 님 따라서 조금씩 해볼려구요 ^^ typos 님은 많이 앞서 가신듯 합니다 ^^ 화이팅 입니다.
Commented by conv2 at 2006/08/07 20:25
RADDirectory ? RAMDirectory가 아닌가 싶습니다. ^^;
Commented by typos at 2006/08/07 20:33
오타였음 수정했습니다.
Commented by 오픈검색 at 2006/08/07 23:19
너무 치켜 세워주셔서 부끄럽군요(〃?〃)
오늘 conv2님이 보내주신 루씬 인 액션이 저의 손에 도착했습니다.
한글로 된 책이라 좀 이해하기 쉽지 않을까 하는 허무맹랑한 상상을 하며,아파치 루씬 입문과
병행해서 읽어볼까 생각중입니다.
typos님 말씀처럼 인터넷하고 책에 다 있으니 맘 먹기 나름이겠지요^^
Commented by hakim at 2014/12/08 13:34
Commented by susi at 2015/05/26 21:13
Commented by poker at 2015/06/09 22:09
는 오픈검색님께 http://walipoker.com
Commented by togel hk at 2016/02/25 12:33
이것을 좀 더 체계적 http://Jeniustoto.com
http://Dewapoker.de
Commented by jeniusseo at 2016/05/19 01:41
Commented by ajoqq at 2016/05/19 01:45

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >