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