본문 바로가기

루씬

[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] 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] Directory. 실시간 Document 추가. 루씬에서 색인이나 검색을 할 때 IndexWriter 그리고 IndexReader를 생성합니다. 생성법은 간단합니다. Directory dir = FSDirectory.getDirectory(dirPath); IndexReader reader = IndexReader.open(dir); IndexWriter writer = new IndexWriter(dir,Analyzer, true); 물론 맨 앞 파라메터인 dir은 String으로 path를 줘도 됩니다. 어차피 내부적으로 Directory 객체를 생성하여 초기화 시킵니다. IndexWriter의 제일 마지막 인자인 boolean 값은 새로운 Document를 Index에 추가 할 때 append 할 것인지 overwrite할 것인지 정해주는 것입니.. 더보기
[lucene] TermFreqVector, TermPositionVector 루씬 인 액션을 보던 중 텀벡터에 대한 얘기가 나와서 살펴보았다. 간단하게 색인을 해 놓고.. 소스를 간단하게 만들어서 돌려보았다.. package kr.co.gshs.lucene.test; import java.io.IOException; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.TermFreqVector; import org.apache.lucene.index.TermPositionVector; import org.apache.lucene.index.TermVectorOffsetInfo; public class TermVectorT.. 더보기
[lucene] 복합명사 추출. Filter Class 일단 이름 Term을 사전에서 찾아내고 그 다음에 하는 일이 명사를 추출하는 것이다. 어케 보면 별거 없는데 이따 참으로 고민을 많이했다. 일단 명사 사전이 있다 치고, 과연 어떻게 만족스러운 명사 추출을 할 것인가... 대표적인 예가.. "검색엔진개발자" 라는 단어가 있고 사전에는 "검색" , "엔진", "개발자" 라는 단어들이 있다고 하자.. 원하는 결과는 "검색엔진개발자" , "검색", "엔진" ,"개발자", "검색엔진", "엔진개발자" 이런식의 결과가 나오기를 원했다. 처음에는 앞에서 부터 하나씩 서치해가는 방식이었는데.. 즉.. 검 검색 검색엔진 검색엔진개... . . 색 색엔 색엔진 색엔진개.. 이런식.. 이게 너무 하나의 단어에 대해서 loop를 많이 돌고 결정적으로 위의 경우에서 사전에 ".. 더보기
[lucene] Dictionary Class. CharTokenizer에 이어서 한글 Analyzer를 만들기 위해 작성한 사전 클래스입니다. 이 클래스는 루씬에서 제공되는 클래스는 아니고 제가 필요에 의해서 작성한 클래스입니다. 기본적인 틀은 루씬 인 액션에 있는 소스를 참고하였고 세부적인 내용은 제가 작성을 하였습니다. 참고해주시구요.. 사전을 몇개 만들었다. 명사사전/ 이름사전/ 불용어사전/ 동의어사전/ 어미제거사전 자..이렇게 해놓고 모든걸 적용시켜보니.. 일단 색인어 추출을 (not 형태소분석) 하는데 있어서 어미제거가 되어버리면 , 단어가 너무 많이 망가지는 현상이 발생하여 현재는 어미제거는 하지 않고 있다. 위 사전들을 적용한 클래스를 앞으로 하나하나 작성을 해볼텐데.. 일단 기본이 되는 사전 클래스.. 사전 클래스는 어렵게 구현하지는 .. 더보기