FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(this.entityManager); QueryBuilder qb = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get(); FullTextQuery fullTextQuery = fullTextEm.createFullTextQuery(qb.all().createQuery()); // I added this line to use projections fullTextQuery.setProjection("id", "name", "email", "user", "phone"); Sort sortField = new Sort(new SortField("name", SortField.STRING)); fullTextQuery.setSort(sortField); return fullTextQuery.getResultList();
/** * Verifies a query on a specific term returns an expected amount of results. We do actually load entities from * database, so both database and index are tested. * * @param termMatch * @param expectedMatches */ private void assertEmailsFound(String termMatch, int expectedMatches) { FullTextSession fullTextSession = node.openFullTextSession(); try { TermQuery termQuery = new TermQuery(new Term("message", termMatch)); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(termQuery, SimpleEmail.class); List<SimpleEmail> list = fullTextQuery.getResultList(); Assert.assertEquals(expectedMatches, list.size()); if (expectedMatches != 0) { Assert.assertEquals("complaints-office@world.com", list.get(0).to); } } finally { fullTextSession.close(); } }
public List<Person> search(String keywordsList) throws DAOException { try { FullTextEntityManager fullTextEm = Search.getFullTextEntityManager(this.entityManager); QueryBuilder qb = fullTextEm.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get(); List<Query> queryList = new LinkedList<Query>(); Query query = null; for (String keyword : keywordsList) { query = qb.keyword().onFields("name", "email", "username", "phone").matching(keyword).createQuery(); queryList.add(query); } BooleanQuery finalQuery = new BooleanQuery(); for (Query q : queryList) { finalQuery.add(q, Occur.MUST); } FullTextQuery fullTextQuery = fullTextEm.createFullTextQuery(query); fullTextQuery.setProjection("name", "email", "username", "phone"); Sort sortField = new Sort(new SortField("name_order", SortField.STRING)); fullTextQuery.setSort(sortField); return fullTextQuery.getResultList(); } catch (Exception e) { logger.error("Error searching index: " + keywords, e); throw new DAOException(e); } }
@SuppressWarnings("unchecked") @Test public void testSimpleQueryStringDSL() throws Exception { SessionFactory sessionFactory = (SessionFactory) bundleContext.getService( serviceReference ); FullTextSession fullTextSession = Search.getFullTextSession( sessionFactory.openSession() ); persistElmo( fullTextSession ); QueryBuilder qb = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity( Muppet.class ) .get(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( qb.simpleQueryString().onField( "name" ).matching( "Elmo" ).createQuery(), Muppet.class ); List<Muppet> results = fullTextQuery.getResultList(); assertEquals( "Elmo should be there", 1, results.size() ); Muppet muppet = results.get( 0 ); assertEquals( "Index muppet is not Elmo", "Elmo", muppet.getName() ); }
List<InspectionMaster> results = jpaQuery.getResultList();
@Test @TestForIssue(jiraKey = "HSEARCH-2630") public void objectLoading_multiClassesQueryLoader_singleResult() { Session s = openSession(); try { Transaction tx = s.beginTransaction(); A entity = new A(); entity.id = 1L; s.persist( entity ); tx.commit(); FullTextSession session = Search.getFullTextSession( s ); FullTextQuery query = session.createFullTextQuery( matchAll(), A.class, B.class ); assertEquals( 0, getStatistics().getObjectsLoadedCount() ); query.getResultList(); assertEquals( 1, getStatistics().getObjectsLoadedCount() ); query = session.createFullTextQuery( matchAll(), A.class, B.class ); query.getResultList(); assertEquals( 2, getStatistics().getObjectsLoadedCount() ); } finally { s.close(); } }
private void verifyResult(FullTextSessionBuilder node) { FullTextSession fullTextSession = node.openFullTextSession(); try { Transaction transaction = fullTextSession.beginTransaction(); QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder() .forEntity(Toaster.class).get(); Query query = queryBuilder.keyword().onField("serialNumber").matching("A1").createQuery(); List list = fullTextSession.createFullTextQuery(query).getResultList(); assertEquals(1, list.size()); Device device = (Device) list.get(0); assertEquals("GE", device.manufacturer); transaction.commit(); } finally { fullTextSession.close(); } }
@Test @TestForIssue( jiraKey = "HSEARCH-2842" ) public void fullTextQuery() { try ( Session session = openSession(); FullTextSession fullTextSession = Search.getFullTextSession( session ) ) { QueryBuilder qb = getSearchFactory().buildQueryBuilder().forEntity( FilterableEntity.class ).get(); Query query = qb.keyword().onField( "textValue" ).matching( "foo" ).createQuery(); FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, FilterableEntity.class ); ftQuery.setSort( qb.sort().byField( "idSort" ).createSort() ); ftQuery.setMaxResults( 3 ); assertThat( ftQuery.getResultSize() ).isEqualTo( 4 ); // Ignores max results, that's expected assertThat( ftQuery.getResultList() ).extracting( "id" ) .containsExactly( 0, 2, 3 ); // TODO we'll need to change the following assertions when fixing HSEARCH-2848. fullTextSession.enableFilter( "filter1" ).setParameter( "excludedNumericValue", 3 ); // Using a Hibernate ORM filter won't affect the returned result size assertThat( ftQuery.getResultSize() ).isEqualTo( 4 ); /* * Using a Hibernate ORM filter will affect the returned result list, * but the filter will be applied after the result limit. * Thus the result 4 is missing here, while we would expect it to be included. */ assertThat( ftQuery.getResultList() ).extracting( "id" ) .containsExactly( 0, 2 ); } }
private void verifyNodeSeesUpdatedIndex(FullTextSessionBuilder node) { FullTextSession fullTextSession = node.openFullTextSession(); try { Transaction transaction = fullTextSession.beginTransaction(); QueryBuilder queryBuilder = fullTextSession.getSearchFactory() .buildQueryBuilder() .forEntity(SimpleEmail.class) .get(); Query query = queryBuilder.keyword() .onField("message") .matching("Hibernate Getting Started") .createQuery(); List list = fullTextSession.createFullTextQuery(query).setProjection("message").getResultList(); assertEquals(1, list.size()); Object[] result = (Object[]) list.get(0); assertEquals(messageText, result[0]); transaction.commit(); } finally { fullTextSession.close(); } }
private static <T> List<T> find(Session session, Class<T> clazz, String key, String value) { FullTextSession fts = Search.getFullTextSession( session ); Query luceneQuery = fts.getSearchFactory().buildQueryBuilder() .forEntity( clazz ).get() .keyword().onField( key ).matching( value ) .createQuery(); @SuppressWarnings("unchecked") List<T> result = fts.createFullTextQuery( luceneQuery ).getResultList(); return result; }
assertEquals( 0, getStatistics().getObjectLoadingTotalTime() ); query.getResultList(); query.getResultList();
@Test public void queryExecution() { Session s = openSession(); try { FullTextSession session = Search.getFullTextSession( s ); FullTextQuery query = session.createFullTextQuery( matchAll(), A.class ); assertEquals( 0, getStatistics().getSearchQueryExecutionCount() ); assertEquals( 0, getStatistics().getSearchQueryExecutionAvgTime() ); assertEquals( 0, getStatistics().getSearchQueryExecutionMaxTime() ); assertNull( getStatistics().getSearchQueryExecutionMaxTimeQueryString() ); query.getResultList(); assertEquals( 1, getStatistics().getSearchQueryExecutionCount() ); assertNotEquals( 0, getStatistics().getSearchQueryExecutionAvgTime() ); assertNotEquals( 0, getStatistics().getSearchQueryExecutionMaxTime() ); assertNotNull( getStatistics().getSearchQueryExecutionMaxTimeQueryString() ); query = session.createFullTextQuery( matchAll(), A.class ); query.getResultList(); assertEquals( 2, getStatistics().getSearchQueryExecutionCount() ); assertNotEquals( 0, getStatistics().getSearchQueryExecutionAvgTime() ); assertNotEquals( 0, getStatistics().getSearchQueryExecutionMaxTime() ); assertNotNull( getStatistics().getSearchQueryExecutionMaxTimeQueryString() ); } finally { s.close(); } }