public List<Role> searchRoles(String keyword) { // Index domain object (works) EntityManager manager = factory.createEntityManager(); FullTextEntityManager ftManager = Search.getFullTextEntityManager(manager); ftManager.getTransaction().begin(); List<Role> roles = ftManager.createQuery("select e from " + Role.class.getName() + " e").getResultList(); for (Role role : roles) { ftManager.index(role); } ftManager.getTransaction().commit(); // Retrieve element from search (works) TermQuery tquery = new TermQuery(new Term("authority", keyword)); FullTextQuery query = ftManager.createFullTextQuery(tquery, Role.class); return query.getResultList(); }
@Test public void testGetResultList() throws Exception { em.getTransaction().begin(); Query query = NumericRangeQuery.newIntRange( "saltQty", 23, 23, true, true ); assertEquals( "getResultList should return a result", 1, em.createFullTextQuery( query ).getResultList().size() ); em.getTransaction().commit(); }
@Test public void testNonMatchingQueryDoesReturnEmptyResults() throws Exception { em.getTransaction().begin(); Query query = NumericRangeQuery.newIntRange( "saltQty", 0, 0, true, true ); assertEquals( 0, em.createFullTextQuery( query ).getResultList().size() ); em.getTransaction().commit(); }
@After public void tearDown() throws Exception { ftem.getTransaction().begin(); ftem.createQuery( "delete from " + EntityWithIdClass.class.getSimpleName() ).executeUpdate(); ftem.createQuery( "delete from " + EntityWithEmbeddedId.class.getSimpleName() ).executeUpdate(); ftem.purgeAll( EntityWithIdClass.class ); ftem.purgeAll( EntityWithEmbeddedId.class ); ftem.flushToIndexes(); ftem.getTransaction().commit(); ftem.close(); emf.close(); }
@Test public void testGetResultSize() throws Exception { em.getTransaction().begin(); Query query = NumericRangeQuery.newIntRange( "saltQty", 23, 23, true, true ); assertEquals( "Wrong result size", 1, em.createFullTextQuery( query ).getResultSize() ); em.getTransaction().commit(); }
@Before @Override public void setUp() { super.setUp(); em = Search.getFullTextEntityManager( factory.createEntityManager() ); em.getTransaction().begin(); bretzel = new Bretzel( 23, 34 ); em.persist( bretzel ); em.getTransaction().commit(); em.clear(); }
@Test public void testGetSingleResult() throws Exception { em.getTransaction().begin(); Query query = NumericRangeQuery.newIntRange( "saltQty", 23, 23, true, true ); assertEquals( "getSingleResult should return a result", 23, ( (Bretzel) em.createFullTextQuery( query ).getSingleResult() ).getSaltQty() ); em.getTransaction().commit(); }
@Before public void setUp() throws Exception { emf = Persistence.createEntityManagerFactory( PERSISTENCE_UNIT_NAME ); ftem = Search.getFullTextEntityManager( emf.createEntityManager() ); ftem.getTransaction().begin(); for ( LocalDate d = START; d.isBefore( END ); d = d.plusDays( 1 ) ) { ftem.persist( new EntityWithIdClass( d ) ); ftem.persist( new EntityWithEmbeddedId( d ) ); } ftem.getTransaction().commit(); assertThat( JobTestUtil.nbDocumentsInIndex( emf, EntityWithIdClass.class ) ).isEqualTo( 0 ); assertThat( JobTestUtil.nbDocumentsInIndex( emf, EntityWithEmbeddedId.class ) ).isEqualTo( 0 ); }
@After public void deleteTestData() { EntityManager em = factory.createEntityManager(); FullTextEntityManager ftem = Search.getFullTextEntityManager( em ); ftem.getTransaction().begin(); QueryDescriptor query = ElasticsearchQueries.fromJson( "{ 'query': { 'match_all' : {} } }" ); List<?> result = ftem.createFullTextQuery( query ).getResultList(); for ( Object entity : result ) { ftem.remove( entity ); } ftem.getTransaction().commit(); ftem.close(); }
@Test public void testQueryViaEntityManager() { EntityManager em = factory.createEntityManager(); FullTextEntityManager ftem = Search.getFullTextEntityManager( em ); ftem.getTransaction().begin(); QueryDescriptor query = ElasticsearchQueries.fromJson( "{ 'query': { 'match' : { 'lastName' : 'Hergesheimer' } } }" ); Object[] result = (Object[]) ftem.createFullTextQuery( query, GolfPlayer.class ) .setProjection( ElasticsearchProjectionConstants.SOURCE ) .getSingleResult(); String source = (String) result[0]; JsonHelper.assertJsonEqualsIgnoringUnknownFields( "{" + "'lastName': 'Hergesheimer'," + "'fullName': 'Klaus Hergesheimer'," + "}", source ); ftem.getTransaction().commit(); ftem.close(); }
public void testQueryTimeoutException() throws Exception { FullTextEntityManager em = Search.getFullTextEntityManager( factory.createEntityManager() ); em.getTransaction().begin(); for ( long i = 0; i < 1000; i++ ) { Clock clock = new Clock( Long.valueOf( i ), "Model cat A" + i, ( i % 2 == 0 ) ? "Seiko" : "Swatch", Long.valueOf( 2000 + i ) ); em.persist( clock ); em.getTransaction().commit(); em.getTransaction().begin(); final QueryBuilder builder = em.getSearchFactory().buildQueryBuilder().forEntity( Clock.class ).get(); Query query = builder.keyword().onField( "brand" ).matching( "Seiko" ).createQuery(); fail( "Expected a QueryTimeoutException" ); em.getTransaction().commit(); em.clear(); em.getTransaction().begin(); assertEquals( 1000, em.createQuery( "delete from " + Clock.class.getName() ).executeUpdate() ); em.getTransaction().commit();
em.getTransaction().begin(); Bretzel bretzel = new Bretzel( 23, 34 ); em.persist( bretzel ); em.getTransaction().commit(); em.clear(); em.getTransaction().begin(); ); assertEquals( 1, em.createFullTextQuery( query ).getResultSize() ); em.getTransaction().commit(); em.getTransaction().begin(); em.remove( em.find( Bretzel.class, bretzel.getId() ) ); em.getTransaction().commit();
@Test public void testIndex() { em.getTransaction().begin(); // verify against index assertEquals( "At the beginning of the test there should be an indexed Bretzel", 1, countBretzelsViaIndex( em ) ); // clear index em.purgeAll( Bretzel.class ); em.flushToIndexes(); // verify Bretzel removed from index assertEquals( "The index should be empty after an purge and flush", 0, countBretzelsViaIndex( em ) ); // re-index manually em.index( em.find( Bretzel.class, bretzel.getId() ) ); em.getTransaction().commit(); assertEquals( "After re-indexing the bretzel should be indexed again", 1, countBretzelsViaIndex( em ) ); }
@Test @SuppressWarnings("unchecked") public void testResultOrderedByDateDescending() throws Exception { EntityTransaction tx = em.getTransaction(); tx.begin(); QueryBuilder builder = em.getSearchFactory().buildQueryBuilder().forEntity( ProductArticle.class ).get(); org.apache.lucene.search.Query query = builder.keyword().wildcard().onField( "header" ).matching( "hib*" ).createQuery(); Sort dateDescending = builder.sort().byField( "creationDate" ).desc().createSort(); List<ProductArticle> result = em.createFullTextQuery( query, ProductArticle.class ) .setSort( dateDescending ).setFirstResult( 3 ).getResultList(); assertThat( result ).as( "query result" ).hasSize( 3 ); assertThat( result.get( 0 ).getArticleId() ).as( "article id" ).isEqualTo( 3 ); assertThat( result.get( 1 ).getArticleId() ).as( "article id" ).isEqualTo( 2 ); assertThat( result.get( 2 ).getArticleId() ).as( "article id" ).isEqualTo( 1 ); tx.commit(); em.clear(); }
@Test public void testHibernateSearchJPAAPIUsage() throws Exception { final FullTextEntityManager ftem = Search.getFullTextEntityManager( getFactory().createEntityManager() ); ftem.getTransaction().begin(); final Insurance insurance = new Insurance(); insurance.setName( "Macif" ); ftem.persist( insurance ); ftem.getTransaction().commit(); ftem.clear(); ftem.getTransaction().begin(); final QueryBuilder b = ftem.getSearchFactory() .buildQueryBuilder() .forEntity( Insurance.class ) .get(); final Query lq = b.keyword().onField( "name" ).matching( "Macif" ).createQuery(); final FullTextQuery ftQuery = ftem.createFullTextQuery( lq, Insurance.class ); final List<Insurance> resultList = ftQuery.getResultList(); assertThat( getFactory().getPersistenceUnitUtil().isLoaded( resultList.get( 0 ) ) ).isTrue(); assertThat( resultList ).hasSize( 1 ); for ( Object e : resultList ) { ftem.remove( e ); } ftem.getTransaction().commit(); ftem.close(); }
@Test public void testLimitFetchingTime() { FullTextEntityManager em = Search.getFullTextEntityManager( factory.createEntityManager() ); em.getTransaction().begin(); for ( long i = 0; i < 1000; i++ ) { Clock clock = new Clock( Long.valueOf( i ), "Model cat A" + i, ( i % 2 == 0 ) ? "Seiko" : "Swatch", Long.valueOf( 2000 + i ) ); em.persist( clock ); em.getTransaction().commit(); em.getTransaction().begin(); final QueryBuilder builder = em.getSearchFactory().buildQueryBuilder().forEntity( Clock.class ).get(); Query query = builder.keyword().onField( "brand" ).matching( "Seiko" ).createQuery(); assertFalse( hibernateQuery.hasPartialResults() ); em.getTransaction().commit(); em.getTransaction().begin(); assertEquals( 1000, em.createQuery( "delete from " + Clock.class.getName() ).executeUpdate() ); em.getTransaction().commit();
private void assertEntityHasBeenIndexed() throws Exception { FullTextEntityManager fullTextEm = Search.getFullTextEntityManager( createEntityManager() ); fullTextEm.getTransaction().begin(); QueryBuilder queryBuilder = fullTextEm.getSearchFactory() .buildQueryBuilder() .forEntity( IndexedNews.class ) .get(); Query luceneQuery = queryBuilder.keyword().wildcard().onField( "newsId" ).ignoreFieldBridge().matching( "tit*" ).createQuery(); @SuppressWarnings("unchecked") List<IndexedNews> list = fullTextEm.createFullTextQuery( luceneQuery ).getResultList(); assertThat( list ).hasSize( 1 ); List<IndexedLabel> labels = list.get( 0 ).getLabels(); assertThat( labels ).hasSize( 2 ); assertThat( contains( labels, "massindex" ) ).isTrue(); assertThat( contains( labels, "test" ) ).isTrue(); fullTextEm.getTransaction().commit(); fullTextEm.close(); }
private void createArticles() { EntityTransaction tx = em.getTransaction(); tx.begin(); try { em.persist( article( 1, "Hibernate & Lucene", date( 4, Calendar.JULY, 2005 ) ) ); em.persist( article( 2, "Hibernate Search", date( 2, Calendar.SEPTEMBER, 2005 ) ) ); em.persist( article( 3, "Hibernate OGM", date( 4, Calendar.SEPTEMBER, 2005 ) ) ); em.persist( article( 4, "Hibernate", date( 4, Calendar.DECEMBER, 2005 ) ) ); em.persist( article( 5, "Hibernate Validator", date( 8, Calendar.SEPTEMBER, 2010 ) ) ); em.persist( article( 6, "Hibernate Core", date( 4, Calendar.SEPTEMBER, 2012 ) ) ); } finally { tx.commit(); em.clear(); } }
@SuppressWarnings("unchecked") private void assertAssociatedElementsHaveBeenIndexed() throws Exception { FullTextEntityManager fullTextEm = Search.getFullTextEntityManager( createEntityManager() ); fullTextEm.getTransaction().begin(); QueryBuilder b = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity( IndexedLabel.class ).get(); { Query luceneQuery = b.keyword().wildcard().onField( "name" ).matching( "tes*" ).createQuery(); List<IndexedLabel> labels = fullTextEm.createFullTextQuery( luceneQuery ).getResultList(); assertThat( labels ).hasSize( 1 ); assertThat( contains( labels, "test" ) ).isTrue(); } { Query luceneQuery = b.keyword().wildcard().onField( "name" ).matching( "mas*" ).createQuery(); List<IndexedLabel> labels = fullTextEm.createFullTextQuery( luceneQuery ).getResultList(); assertThat( labels ).hasSize( 1 ); assertThat( contains( labels, "massindex" ) ).isTrue(); } fullTextEm.getTransaction().commit(); fullTextEm.close(); }