본문 바로가기

Lucene

[lucene] Sort와 SortField 예전에 1.4 버젼으로 개발 할 때는 Sort하는 방법을 하나밖에 몰랐습니다. Sort 클래스를 이용하는 거였는데요 방법은 아래와 같습니다. Sort sort = new Sort("TITLE", true); TopFieldDocs tfd = searcher.search(query,null,50,sort); 물론 예전에는 Hits 객체에다가 바로 받아왔지만 현재는 Hits 는 deprecated 되었으므로 위와 같이 사용합니다. 그리고 지금은 하나의 방법을 더 알게 되었는데 그것이 SortField를 사용하는 방법입니다. 위의 예제를 SortField를 사용하는 방식으로 변경해보면 SortField sf = new SortField("TITLE",SortField.STRING,true); Sort sort.. 더보기
[lucene] TopDocCollector와 TopFieldDocs. 루씬에서 색인을 한 후 검색을 수행 할 때 ScoreDoc 객체를 얻어올 수 있는 두가지 방법이 있습니다. 하나는 TopDocCollector를 사용하는 것이고 또 하나는 TopFieldDocs를 사용하는 것입니다. 일단 두개의 사용 샘플 코드를 살펴보면 TopDocCollector collector = new TopDocCollector(5 * hitsPerPage); QueryParser parser = new QueryParser(fieldName, analyzer); query = parser.parse("keyword"); searcher.search(query, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; Document doc .. 더보기
luke 0.9.1 release. http://www.getopt.org/luke luke 0.9.1 버그 픽스 버젼이 릴리즈 되었습니다. 루씬을 사용하는 분들이라면 필수로 사용하셔야 할 툴이죠 ^^ 릴리즈된지는 꽤 되었는데.. 까먹고 있다가 이제서야..--ㅋ 루씬 2.4 버젼부터는 루크 0.9 이상의 버젼을 사용해야 하는 것으로 알고 있습니다. 그럼 수고하세요~ 더보기
[lucene] IndexReader를 사용한 모든 Document 읽기. IndexReader reader = IndexReader.open(....); for (int i = 0; i < reader.maxDoc(); i++) { if (reader.isDeleted(i)) { continue; } Document doc = reader.document(i); ... } Hint: if you have an unoptimized index with deleted documents, and you want to retrieve also the content of these deleted documents, call first IndexReader.undeleteAll(). 더보기
[lucene] TokenStream.next() 와 TokenStream.next(Token token) 루씬 앤 액션 1판의 내용을 보면 Analyzer 분석 Util 클래스를 만드는데 아래와 같은 내용의 코드가 나옵니다. TokenStream stream = analyzer.tokenStream("contents", new StringReader(text)); ArrayList tokenList = new ArrayList(); while (true) { Token token = stream.next(); if (token == null) break; tokenList.add(token); } 이 바로 앞 포스트와도 조금 연관이 있는 내용일지 모르겠습니다. 루씬 2.4.0으로 넘어오면서 바로 저 TokenStream.next() 메서드가 deprecated 되었습니다. 일단 이전버전과 현재 버젼의 메서드.. 더보기
[lucene] Analyzer와 Filter (2.4.0) 예전에 작성해 놓은 Analyzer와 Filter 포스트는 1.4.X 버젼대의 소스입니다. 예전에는 Analyzer의 형식이 public TokenStream tokenStream(String fieldName, Reader content) { return new GSKoreanSynonymFilter( new GSKoreanStopWordFilter( new GSKoreanSeperatorWordFilter( new GSKoreanSeperatorNameWordFilter( new GSKoreanTokenizer(content){} //GSKoreanTokenizer ) // GSKoreanSeperatorNameWordFilter ) //GSKoreanSeperatorWordFilter ), engi.. 더보기
[lucene] Analyzer와 Filter (lucene 1.4.X) 루씬의 Analyzer는 아래와 같은 구조로 되어있습니다. public TokenStream tokenStream(String fieldName, Reader content) { return new GSKoreanSynonymFilter( new GSKoreanStopWordFilter( new GSKoreanSeperatorWordFilter( new GSKoreanSeperatorNameWordFilter( new GSKoreanTokenizer(content){} //GSKoreanTokenizer ) // GSKoreanSeperatorNameWordFilter ) //GSKoreanSeperatorWordFilter ), engine); } TokenStream을 만들고 정규화를 시키는 Toke.. 더보기
[lucene] Collector sample.. public class TestSearch extends TestCase { public void test() throws Exception { InstantiatedIndex index = new InstantiatedIndex(); InstantiatedIndexReader reader = new InstantiatedIndexReader(index); IndexSearcher searcher = new IndexSearcher(reader); InstantiatedIndexWriter writer = new InstantiatedIndexWriter(index); Document doc; Collector collector; doc = new Document(); doc.add(new Field(".. 더보기
루씬 2.4.0이 나왔네요~ 루씬 2.4.0 이 available 되었습니다.. 주요 내용은 아래와 같네요.. * New InstantiatedIndex (contrib/instantiated): RAM-based index that enables much faster searching than RAMDirectory. - RANDirectory를 사용한 검색보다 더 빠른 RAM-based 인덱스. * New IndexWriter constructors now default autoCommit to false. - IndexWriter는 이제 디폴트로 autoCommit이 false. * New commit() method in IndexWriter lets you control when changes are made visible.. 더보기
Document 하나가 RamBufferSize보다 클 때.. 색인시에 Document 하나가 RamBufferSize보다 크면 인덱스 도중에 outOfMemory가 발생하게 된다. (도대체 document가 얼마나 크길래 -_-;) 이 해결은 jvm heap 사이즈를 늘려주던가... document의 크기를 작게 조절하던가..;;;; 라고 하네요.. 더보기