좌측 내 얼굴
밑에 조그마한 검색창을 하나 넣어놨다.
드디어 xrath.com에 Lucene을 붙였다~! 웹 검색 인터페이스는 구글 인터페이스의 외형만을 조금 따라했다. 검색 범위는 블로그 내용, 블로그 코멘트 그리고 타자방 문장이다.
개발한 것은 Lucene을 이용하여 만든 검색서버인 rath-search-daemon.jar와 검색서버와 붙일 때 사용할 경량 클라이언트인 rath-search.jar로 구성된다.
-rw-r--r-- 1 rath dev 44112 1월 18 16:44 rath-search-daemon.jar
-rw-r--r-- 1 rath dev 10440 1월 18 16:44 rath-search.jar
이름을 좀 잘 지었어야 하는데 -_-; 이름 정하는데 너무 많은 시간이 들이는 것이 아까워 그냥 했다.
총 검색할 범주가 3개라서 좌측 메뉴의 검색은 통합검색이다. 블로그에서 몇개 코멘트에서 몇개 타자방에서 몇개.. 최근 8, 15, 15개만 보여주고 '더 많은 XXX 보기'를 누르면 범주별로 보면서 페이징을 할 수 있다.
검색 클라이언트와 daemon간의 TCP 통신에서 SEARCH 요청은 아래와 같은 프로토콜을 사용한다.
<= SEARCH $(category) $(offset) $(length) $(sortOption) $(type) keywords
=> RESULT $(count) $(total) $(timeInMillis) $(optional result-length)
요청했을때의 type이 text였으면 RESULT 이후에 결과를 text로 막 뿌리게 되어있고 type이 java이면 org.apache.lucene.document.Document 클래스를 담고 있는 java.util.List를 ObjectOutputStream으로 Serialize 하여 통째로 보내버린다.
나중에 type에 xml, python-pickle, ruby-marshall 이런거 넣어도 좋겠다 ㅎㅎ 글 추가/수정/삭제는 rath-search.jar 클라이언트에 IndexUtil.add/update/remove(String category, String id) 메서드를 만들어 기존 페이지들을 간단히 마이그레이션 할 수 있었다.
월요일 새벽 3시경 awkn님이 던져주신 문서로 Lucene 공부를 시작해서 만 3일간의 대장정이 드디어 끝났다. 제대로 공부해야겠다는 생각에 매닝의 '루씬 인 액션' 책도 샀지만 이것저것 삽질하고 공부하느라 아직 책은 한 페이지도 못봤다. 이제 다시 봐야지 -_-;
이제 간단히 붙여보는 연습이 끝났으니 루씬에 대해 더 공부해야겠다. 사논 책도 보고 좀 더 리서치 해봐야겠지만, 살짝 범용으로 좀 더 가다듬어서 웹페이지 말고도 MSN 대화기록에서 검색을 한다던지, 한글 검색 비리리하니까 소스 코드 내 검색을 한다던지.. 등으로 활용해봐야겠다.
암튼 붙여서 기분이 매우 좋다! ㅎㅎ