본문 바로가기

about lucene

[about Lucene] 루씬으로 검색엔진 개발하기 - IndexWriter - 루씬으로 뭔가 작업을 한다면 사실 가장 어려운 부분이 Analyzer를 입맛에 맞게 만드는 부분일 것 입니다. 지금까지 작성한 Analyzer에 대한 내용이 이렇게 길었던 것도 그런 이유였고요... 이제부터 이야기 할 Indexing, Search, Query, Sort등은 사실 사용하기가 그렇게 어려운 것은 아닙니다. 이미 API자체가 너무나도 잘 만들어졌기 때문에 그냥 특별한 옵션 없이 사용하는 것 만으로도 충분히 잘 사용 할 수가 있습니다. 그 다음엔 사실 경험이구요... 포스트의 내용도 기본적인 API에 대한 테스트케이스와 이것들을 사용하면서 기억에 남았던 내용들에 대한 것을 소개해드리는 내용이 될 것 같습니다. 사실 대부분의 내용은 JAVADOC이나 루씬인액션과 같은 책을 읽어보는 것이 훨씬 도.. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 - Analyzer (6) - 이번에는 많은 분들께서 기다리셨을(?) 명사 추출 필터입니다. 사전에 등록되어있는 명사를 기반으로 Tokenizer나 선행 TokenFilter로 부터 넘어온 Token을 탐색하여 명사를 추출해내는 구조입니다. 기대를 하셨다면 죄송스럽게도 굉장히 별거 없는 Filter입니다. 형태소 분석이 아닌 단순히 Token을 읽어 사전에 있는 단어를 추출하는 방식입니다. Token탐색도 그냥 character단위로 쭉.... 합니다. 이걸 다른 자료구조형으로 만들면 속도를 빠르게 할 수도 있겠지만 여기서는 코드의 간결함을 위해서 복잡한 부분은 모두 제외를 시킬 예정입니다. 이 추출의 과정이 형태소분석을 기반으로 알고리즘이 만들어져 있다면 이 Filter가 형태소분석기가 됩니다. 하지만 이 형태소분석이라는 것이 쉬운.. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 - Analyzer (5) - 이번에는 동의어 필터를 만들어보겠습니다. 동의어의 역할은 다 아시겠지만 특정한 키워드에 대해서 확장된 검색을 지원 할 수 있도록 해줍니다. 이 예제도 앞선 예제들과 마찬가지로 루씬인액션의 책에 있는 예제를 보고 우리 상황에 맞춰 다시 만든 코드들입니다. 먼저 테스트 케이스를 보겠습니다. DevysSynonymFilterTest.java 테스트 케이스는 양방향으로 검사를 하고 있습니다. 동의어 목록을 미리 지정해두고 TokenFilter로부터 나오는 Token을 리스트와 비교.. 그리고 이 Token을 따로 저장해두고 다시 동의어 목록을 가지고 비교합니다. 예를 들어서 동의어가 "노트북, notebook, 노트북PC"로 등록되어 있다면 3개 중 하나의 키워드가 검색쿼리로 들어온다고 해도 동의어로 등록된 3.. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 - Analyzer (1) - 앞에 데모 프로그램을 보셔서 아시겠지만 검색이라는 하나의 작업을 위해서는 크게 색인과 검색이라는 2가지 프로세스를 거쳐야 합니다. 이중 색인과 검색에 모두 관여하는 것이 하나 있는데 그것이 바로 키워드 추출.. 즉, 흔히 이야기하는(하지만 너무나 어려운) 형태소분석입니다. (이후에는 키워드 추출이라고 하도록 하겠습니다.) 잠깐 루씬을 떠나서 검색이론에 대해서 이야기 해 보겠습니다. 흔히 검색에서 이야기하는 색인 파일은 대부분 "역색인(Inverted Index)" 구조로 되어있습니다. 이게 어떤 구조인가하면.... 책의 맨 뒤 부록에 나오는 "단어"를 기준으로 페이지를 나열한 형태의 색인 구조라고 보시면 됩니다. 나이키 - Doc1, Doc2, Doc3 운동화 - Doc1, Doc5 청바지 - Doc6.. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 - Demo - 루씬이란 무엇인가? 에서 부터 시작을 해봐야 할 것 같습니다. 루씬은 full text 검색엔진을 만들 수 있는 라이브러리를 제공합니다. 검색엔진이라고 하면 키워드분석 / 색인 / 검색의 과정을 수행하는 것으로 크게 나눠 볼 수 있겠는데, 이런 과정들을 실제로 구현 할 수 있는 API를 제공합니다. 우선 루씬을 사용해서 색인과 검색이 어떠한 방식으로 이루어지는지 예제를 보는 것이 가장 손쉽게 루씬에 대해서 알아 볼 수 있는 방법이 될 것 같습니다. 이 예제들은 파일들로부터 내용을 색인하고 그 색인 파일을 사용하여 키워드로 내용을 검색하는 예제입니다. 굉장히 간단한 예제이지만 사실 검색엔진을 구현하는데 있어서 가장 필수적인 내용들은 거의 다 들어가 있다고 보셔도 됩니다. 그만큼 이 루씬이라는 라이브러리가 .. 더보기
[about Lucene] 루씬으로 검색엔진 개발하기 -Prologue- 최근들어 루씬에 대해서 개인적으로 혹은 블로그등을 통해서 문의를 해주시는 분들이 많이 늘었습니다. 검색에 대한 관심이 커진 이유인지 잘 모르겠네요~ 원래 재미있고 어려운 분야긴해서.. 예전에 GS에 있을 때 루씬인액션 번역본 (1.4 기준) 책 한권을 들고 루씬으로 검색엔진을 만들어 본다고 한번 개발을 했던 (이게 벌써.. 3년 4년전이네요...) 경험과 그때 공부한 내용들을 이곳에 정리하긴 하였는데 사실 Case by Case로 작성한 포스트가 많아 처음 루씬을 접하시는 분들은 보시기가 쉽지 않으셨던 것 같습니다. 그 당시 나름 Solr에 대응한다고 Moon(ㅋㅋ)이라는 이름으로 프로젝트를 진행하였었고 한번 테스트 해볼만한 상태까지는 개발을 했었지만 외부 사정에 의해서 거기서 진행을 접을 수 밖에 없었.. 더보기