package kr.debop4j.data.ogm.test.hsearch; import kr.debop4j.data.ogm.test.simpleentity.OgmTestBase; import org.apache.lucene.search.Query; import org.fest.assertions.Assertions; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.hibernate.search.query.DatabaseRetrievalMethod; import org.hibernate.search.query.ObjectLookupMethod; import org.hibernate.search.query.dsl.QueryBuilder; import org.junit.Test; import java.util.List; /** * kr.debop4j.data.ogm.test.hsearch.SearchOnStandaloneOgmTest * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 13. 4. 1 */ public class SearchOnStandaloneOgmTest extends OgmTestBase { @Override protected void configure(Configuration cfg) { super.configure(cfg); // hibernate-search 환경설정 cfg.setProperty("hibernate.search.default.indexmanager", "near-real-time"); cfg.setProperty("hibernate.search.default.directory_provider", "ram"); cfg.setProperty("hibernate.search.default.locking_strategy", "single"); // hibernate-search performance settings cfg.setProperty("hibernate.search.default.indexwriter.max_buffered_doc", "true"); cfg.setProperty("hibernate.search.default.indexwriter.max_merge_docs", "100"); cfg.setProperty("hibernate.search.default.indexwriter.merge_factor", "20"); cfg.setProperty("hibernate.search.default.indexwriter.term_index_interval", "default"); cfg.setProperty("hibernate.search.default.indexwriter.ram_buffer_size", "1024"); } @Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[] { Insurance.class }; } @Test public void hibernateSearchUsage() throws Exception { final Session session = openSession(); final FullTextSession fts = Search.getFullTextSession(session); Transaction transaction = fts.beginTransaction(); int itemCount = 10000; for (int i = 0; i < itemCount; i++) { Insurance insurance = new Insurance(); insurance.setName("Macif"); fts.persist(insurance); } transaction.commit(); fts.clear(); transaction = fts.beginTransaction(); final QueryBuilder b = fts.getSearchFactory() .buildQueryBuilder() .forEntity(Insurance.class) .get(); final Query lq = b.keyword().onField("name").matching("Macif").createQuery(); final FullTextQuery ftq = fts.createFullTextQuery(lq, Insurance.class); ftq.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID); final List<Insurance> results = ftq.list(); Assertions.assertThat(results).hasSize(itemCount); for (Insurance o : results) fts.delete(o); transaction.commit(); fts.close(); } }