목록루씬 (5)
Stack Empty
대부분의 검색 프로그램은 색인 저장소에서 사용자가 입력한 키워드에 맞는 정보를 검색하여 반환하는 것이 대부분이지만 때로는 색인 저장소의 데이터를 삭제해야 될 필요가 있다. 예를 들어 단종된 상품 정보를 더 이상 표시하지 않거나, 금지어가 포함된 모든 문서를 삭제하려는 경우다. 색인 저장소에서 Document를 삭제하려면 Term(루씬 색인에서 단어를 나타내는 가장 기본적 요소) 객체를 이용하여 색인한 Field ID와 내용을 입력한 후 IndexWriter의 deleteDocuments()메서드에 매개변수로 넘겨 호출하면 된다. 하지만 해당 메서드를 호출한다고 색인에서 곧바로 지정한 문서가 삭제 되는 것이 아니라 마치 DBMS의 그것 처럼 삭제 되어야 하는 대상이라는 표시만 해둔다. 이후 IndexWri..
루씬의 색인 작업은 크게 다음 3가지 순서로 볼 수 있다. 텍스트 변환 (추출)분석 (Token화)색인 데이터 생성 1. 텍스트 변환 루씬은 Full-Text 기반의 IR 라이브러리이므로 오로지 String만을 색인화 할 수 있다. 하지만 우리는 PDF 파일, MS 워드, 파워포인트 등의 문서로 정보를 제공하기도 한다. 이것은 Java에서 표현할 수 있는 일반적인 String이 아니므로 이들 정보에서 텍스트 본문을 추출해 낼 수 있는 무엇인가가 필요하게 된다. 그리고 HTML이나 XML은 그것 자체로 텍스트이지만 태그나 엘리먼트를 제거하여 실제 본문의 내용만을 추출할 수 있는 방법이 필요하다. 2. 분석 루씬에서 문서는 Document 객체로 다뤄지는데 IndexWriter의 addDocument를 호출..
루씬은 색인 대상이 되는 문서의 색인 단어수에 제한을 두는 기능을 제공하고 있다. 2.x 버전에서는 IndexWriter Class에 직접적으로 색인이 되는 문서의 색인 대상 총 단어수를 제한할 수 있는 기능을 제공하는데 이 때 사용했던 것이 IndexWriter.setMaxFieldLength(int maxFieldLength)였다. 이 값은 기본적으로 10,000개로 설정이 되어 있으며 의미는 첫 10,000개의 단어만 색인 대상이 되며 만약 10,000개보다 단어 수가 많다면 이후 단어는 색인 대상에서 제외 됨을 의미한다. 위에서 '사용했던' 이라는 단어를 봐도 알 수 있겠지만 이 메서드는 Deprecated 되었으며 LimitTokenCountAnalyzer Class로 분석기를 Wrapping ..
루씬은 필드의 값을 변환하기 위해 토큰의 스트림으로 마킹되는 분석기를 채용했다. 색인 시점에 루씬은 분석기를 지정하게 되어 있고, 이 때 지정된 분석기는 필드와 텍스트로 이뤄진 TokenStream 으로 매핑 작업을 한다. 오늘은 이 TokenStream의 간단한 사용법을 보여주는 Class를 짜보자. package com.tistory.outofmemoryerror.lucene; import java.io.Reader; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucen..
인터넷을 활용하면서 가장 많이 사용하는 것은 당연 정보검색(IR, Information Retrieval)일 것이다. 검색에 문외한인 나는 어느 부분부터 공부를 해야 할 지 알 수가 없어 이것 저것 살펴보던 중 full-text indexing 기반의 IR 라이브러리인 Lucene에 대해 알게 되었다. 국내에는 관련 서적이 2005년에 번역된 Lucene In Action의 제목을 가진 책 단 한권 뿐이고 그마저도 당연히 오래되었기 때문에 예제도 1.4 버전 기반으로 되어 있어 현재 4.X대의 버전과는 상당한 괴리가 있어 공부가 쉽지 않음을 예상했다. 하지만 검색과 관련된 기본 지식을 배울 수 있지 않을까 하여 책을 구매하고 앞으로 공부한 내용을 일기식으로 써야겠다 공부를 시작한 첫날이니 만큼 검색과 관..