Java
Hibernate Search와 Apache Lucene 연동하기
bboks.net
2012. 12. 18. 14:00
Apache Lucene?
100% 자바를 이용하여 검색을 위한 인텍스를 작성하게 해주고 검색을 가능하게 해주는 풀 텍스트 검색 엔진1
Hibernate Search?
Persistence domain model에 검색을 가능하게 해주는 풀 텍스트 검색 엔진2
1. Hibernate Core, Hibernate Search, Lucene Core 준비
여기에서는 Core 4.18 Final, Search 4.1.1 Final, Lucene 3.5.0을 사용
Lucene Core 3.6을 사용할 경우 java.lang.VerifyError 에러가 발생할 수 있음3
2. Hibernate 구성
hibernate-cfg.xml
root-context.xml
${hibernate.dialect} ${hibernate.default_schema} true 25 update true false filesystem /var/lucene/indexes
3. Domain Entity 작성
Author Class
@Entity @Table(name = "author") @Indexed @Analyzer(impl = org.apache.lucene.analysis.standard.StandardAnalyzer.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 }
@Entity @Table(name = "book") @Indexed @Analyzer(impl = org.apache.lucene.analysis.standard.StandardAnalyzer.class) public class Book { private static final long serialVersionUID = 2720032415972578701L; @Id @GeneratedValue @DocumentId private Long id; @ManyToOne(cascade = CascadeType.ALL) @IndexedEmbedded private Author author; @org.hibernate.annotations.Index(name = "summayIndex") @Field(index = Index.YES, store = Store.YES) private String title; //getters and setters }
4. 검색 시 사용할 메소드 작성
public List find(String authorName) { Session session = sessionFactory.getCurrentSession(); FullTextSession fullTextSession = Search.getFullTextSession(session); org.apache.lucene.search.Query q = null; try { String qeuryString = "author.firstName:" + authorName + " OR " + "author.lastName:" + authorName; q = new QueryParser(Version.LUCENE_31, "summary", new KeywordAnalyzer()).parse(qeuryString); } catch(Exception ex) { ex.printStackTrace(); } FullTextQuery fq = fullTextSession.createFullTextQuery(q, Book.class); List books = fq.list(); return books; }
[참고]
Hibernate Search - Apache Lucene Integration Reference Guide