bboks.net™

Apache Lucene에서 KoreanAnalyzer 사용하기 본문

Java

Apache Lucene에서 KoreanAnalyzer 사용하기

bboks.net 2012. 12. 20. 17:57

0. 구축환경

Hibernate Core 4.1.8 Final

Hiberante Search 4.2.0.Beta2

- Hibernate 4.1.1.Final 에서는 Verify Exception이 발생1


1. https://github.com/need4spd/lucene-Korean-Analyzer 에서 KoreanAnalyzer 소드 다운


2. 다운 받은 소스를 압축해제


3. 다운 받은 소스를 Eclipse로 import

3.1 Eclipse의 Package Explorer에서 우클릭 Import 선택

3.2 Maven - Exsiting Maven Project - Next

3.3 Root Directory의 Browse를 눌러 압축을 해제한 소스의 위치를 선택 - Finish


3.4 Import가 끝나면 Package Explorer에 luceneKoreanAnalyzer 프로젝트가 생성됨


4. com.tistory.devyongsik.analyzer 패키지의 KoreanAnalyzer 클래스에 Default 생성자 추가


5. KoreanAnalyzer를 사용하고자 하는 프로젝트에 Dependency 추가


6. 클래스의 Analyzer를 KoreanAnalyzer로 지정

@Entity
@Table(name = "author")
@Indexed
@Analyzer(impl = com.tistory.devyongsik.analyzer.KoreanAnalyzer.class)
public class Author {
	
	private static final long serialVersionUID = 4887864924331295749L;
	
	@Id
	@GeneratedValue
	@DocumentId
	private long id;
	
	@Field(index = Index.YES, store = Store.YES)
	private String firstName;
	
	@Field(index = Index.YES, store = Store.YES)
	@Boost(0.2f)
	private String lastName;

	//getters and setters
}


7. 검색 부분 구현

검색 부분 구현하는 부분은 Hibernate Search Reference를 참고

@SuppressWarnings("unchecked")
@Override
public List find(String authorName) {
	Session session = sessionFactory.getCurrentSession();

	FullTextSession fullTextSession = Search.getFullTextSession(session);

	QueryBuilder qb = fullTextSession.getSearchFactory()
			.buildQueryBuilder().forEntity(Book.class).get();

	org.apache.lucene.search.Query query = qb.keyword()
			.onFields("title", "author.firstName", "author.lastName")
			.matching(authorName).createQuery();


	org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
			query, Book.class);

	List books = hibQuery.list();

	return books;
}