Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- asp.net
- C#
- MANTIS
- TextBox
- decompiler
- javascript
- Bootstrap
- 웹뷰
- 자바
- Maven
- MS-SQL
- STS
- scrollView
- 웹 서비스
- 이클립스
- Apache Lucene
- jsp
- varags
- WebView
- 안드로이드
- Eclipse
- 컬럼명
- MSsql
- html
- Web Service
- 자바스크립트
- SpringSource Tool Suite
- Android
- Java
- Redirect
Archives
- Today
- Total
bboks.net™
Hibernate Search와 Apache Lucene 연동하기 본문
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