본문 바로가기

lucene3.0

Lucene 3.0 TokenStream과 AttributeSource. - 2 - 앞에서 AttributeSource에 Attribute들 (term, offset, position, type 등) set 해주면 그 뒤에 오는 Filter나 Tokenizer가 해당 Attribute를 사용 할 수 있다고 했습니다. 각각의 Filter와 Tokenizer는 모두 TokenStream을 상속하고 있고 이 TokenStream은 AttributeSource를 상속받고 있습니다. 이 Filter와 Tokenizer가 서로 데코레이터 패턴으로 물려있기 때문에 앞에서 set한 결과를 뒤에 따라오는 Filter와 Tokenizer가 사용 할 수 있는 것 입니다. (Java의 stream 관련 클래스들을 생각하시면 됩니다.) 소스를 보면 보통 맨 앞단에서 들어오는 String을 잘라내는 역할을 하는.. 더보기
Lucene 3.0 TokenStream과 AttributeSource. - 1 - 루씬이 버전업 되면서 바뀐 부분 중 하나가 이 부분인 것 같습니다. 이전에는 Tokenizer나 TokenFilter 클래스를 만들 때 TokenStream 클래스를 상속받아 만들고 이 TokenStream의 next 메서드를 사용해서 얻어지는 Token을 가지고 데코레이터 패턴으로 적용 된 Filter들이 Token을 처리하는 방식이었습니다. 예를 들어서, Analyzer의 tokenStream 메서드가 위와 같이 정의되어 있다고 하고 분석해야 할 문장이 "검색엔진 개발자" 라고 했을 때 추출 되는 Token을 얻어내기 위해서 next 메서드를 실행했었습니다. 즉, 대략 위와 같은 방식이었죠. next 메서드가 실행 되면 제일 상위의 Tokenizer에서 "검색엔진,(0,4)" 라는 Token을 만들어.. 더보기
Lucene 3.0 TokenStream. 그리고 Attribute. 예전에 만들었던 한글 명사 추출 Analyzer를 공개하려고 하다가 그 Analyzer의 core 버전이 2.4.0 base여서 이것을 최신 루씬 버전인 3.0으로 컨버팅 하려고 했는데... 바뀐게 한두가지가 아니라서.. 일단 바뀐 부분부터 공부를 해야겠다 싶었다. -_-; 제일 당황스러운 부분이... TokenStream.next(Token token) 메서드가 사라진 것이었다. -_-; 이 부분이 TokenStream.incrementToken() 메서드를 대체가 되었는데 이건 조만간 다시 포스팅 하기로 하고.. 일단, 기존에 사용되던 Token이란 클래스가 남아있기는 한데.. 대부분 Attribute 클래스에 기초한 놈들로 변경이 된 것 같다. 예전에 하나의 String에서 Analyzer로 분석 .. 더보기
Lucene CustomScoreQuerySample #2 - 응용편 - 우선 이 포스트에 나오는 sample 소스는 http://blog.mono-koubou.net/wp-content/uploads/2008/01/valuesourcequerysample.txt 의 소스를 살짝 수정한 소스 입니다. 앞선 포스트에서는 루씬의 CustomScoreQuery 기초적인 사용법을 보았습니다. 이번에는 이 CustomeScoreQuery를 이용해서 조금 응용을 해보겠습니다. 아래 이미지를 봐주세요. 바로 집을 기준으로 거리가 5이내에 있는 스시 집을 찾아보도록 하겠습니다. 일단, 위와 같은 결과를 얻으려면 일단 스시인 집들을 찾고 그 안에서 각 좌표를 통해 거리를 계산해야 할 것 입니다. 거리를 구하는 공식은.. 피타고라스의 정리를 이용하면 아래와 같이 구해집니다. (x'-x)^2 +.. 더보기
Lucene CustomScoreQuerySample #1 우선 아래의 소스는 http://blog.mono-koubou.net/wp-content/uploads/2008/01/valuesourcequerysample.txt 이 소스를 참고하여 좀 더 쉬운 내용으로 재구성 했음을 알려드립니다. 짐승님을 통해 알게 된 CustomScoreQuery. 이게 보면 볼 수록 매력적이다. 내일 공휴일이기도 하고.. 이런거 한번 삘 받았을 때 좀 파보고 싶어서 위 링크의 소스를 보고 간단하게 이것 저것 테스트를 해보기 위한 소스를 만들어 보았다. 2개의 필드를 가진 데이터를 RamDirectory에 색인 해 놓고 검색 테스트를 하면서 score가 어떻게 변하는지 보았다. 위 예제에서는 ValueSource등을 거리 계산 값으로 계산하기 위한 Inner Class들이 몇 개.. 더보기