QueryBuilder qb = em.getSearchFactory().buildQueryBuilder().forEntity(ResourceTable.class).get(); BooleanJunction<?> bool = qb.bool(); bool.must(qb.keyword().onField("myResourceLinksField").matching(theReferencingPid.toString()).createQuery()); bool.must(qb.keyword().onField("myResourceType").matching(theResourceName).createQuery());
/** * @param fields * @param text * @return full text query */ protected QueryBuilder getFullTextQueryBuilder() { FullTextSession fullTextSession = getFullTextSession(); return fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(getEntityClass()).get(); }
private FullTextQuery getSearchByNameQuery(String searchTerm) { FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(getEntityManager()); QueryBuilder projectQueryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder() .forEntity(Project.class).get(); BooleanJunction<?> booleanJunction = projectQueryBuilder.bool(); if (StringUtils.hasText(searchTerm)) { booleanJunction.must(projectQueryBuilder .keyword() .fuzzy().withPrefixLength(1).withThreshold(0.8F) .onField(Binding.project().name().getPath()) .matching(searchTerm) .createQuery()); } else { booleanJunction.must(projectQueryBuilder.all().createQuery()); } return fullTextEntityManager.createFullTextQuery(booleanJunction.createQuery(), Project.class); } }
@SuppressWarnings("unchecked") private List<ArrayBridgeTestEntity> findResultsWithRangeQuery(String fieldName, Object start) { QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder() .forEntity( ArrayBridgeTestEntity.class ).get(); Query query = queryBuilder.range().onField( fieldName ).above( start ).createQuery(); return fullTextSession.createFullTextQuery( query, ArrayBridgeTestEntity.class ).list(); }
@Test public void testHibernateSearchJPAAPIUsage() throws Exception { final Session session = openSession(); Transaction transaction = session.beginTransaction(); final FullTextSession fts = Search.getFullTextSession( session ); final 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 ftQuery = fts.createFullTextQuery( lq, Insurance.class ); final List<Insurance> resultList = ftQuery.list(); assertThat( resultList ).hasSize( 1 ); for ( Object e : resultList ) { fts.delete( e ); } transaction.commit(); fts.close(); }
@Override protected void execute(FullTextSession fts) { Query q = fts.getSearchFactory() .buildQueryBuilder() .forEntity( Book.class ) .get() .all() .createQuery(); fts.createFullTextQuery( q, Book.class ) .setSort( new Sort( new SortField( "totalSold", SortField.Type.LONG, true ) ) ) .setMaxResults( 100 ) .list(); }
private List<Clock> searchModel(String searchString, String tenantId) { FullTextSession session = Search.getFullTextSession( openSessionWithTenantId( tenantId ) ); QueryBuilder queryBuilder = session.getSearchFactory().buildQueryBuilder().forEntity( Clock.class ).get(); Query luceneQuery = queryBuilder.keyword().wildcard().onField( "brand" ).matching( searchString ).createQuery(); Transaction transaction = session.beginTransaction(); @SuppressWarnings("unchecked") List<Clock> list = session.createFullTextQuery( luceneQuery ).list(); transaction.commit(); session.clear(); session.close(); return list; }
.buildQueryBuilder().forEntity(User.class).get(); .keyword() .onFields("name", "city", "email") .matching(text) .createQuery();
@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 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(); }
@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(); }
private List<Clock> searchAll(String tenantId) { FullTextSession session = Search.getFullTextSession( openSessionWithTenantId( tenantId ) ); QueryBuilder queryBuilder = session.getSearchFactory().buildQueryBuilder().forEntity( Clock.class ).get(); Query luceneQuery = queryBuilder.all().createQuery(); Transaction transaction = session.beginTransaction(); @SuppressWarnings("unchecked") List<Clock> list = session.createFullTextQuery( luceneQuery ).list(); transaction.commit(); session.clear(); session.close(); return list; }
@Test public void testFacetEmbeddedAndCollections() throws Exception { FullTextSession fullTextSession = Search.getFullTextSession( openSession() ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( new MatchAllDocsQuery(), Book.class ); QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( Book.class ).get(); FacetingRequest facetReq = builder.facet() .name( "someFacet" ) .onField( "authors.name_untokenized" ) .discrete() .orderedBy( FacetSortOrder.COUNT_DESC ) .includeZeroCounts( false ) .maxFacetCount( 10 ) .createFacetingRequest(); List<Facet> facets = fullTextQuery.getFacetManager().enableFaceting( facetReq ).getFacets( "someFacet" ); assertEquals( "There should be three facets", 3, facets.size() ); assertFacet( facets.get( 0 ), hugo, 3 ); assertFacet( facets.get( 1 ), moliere, 2 ); assertFacet( facets.get( 2 ), voltaire, 1 ); fullTextSession.close(); }
private int countBretzelsViaIndex(FullTextEntityManager em) { QueryBuilder queryBuilder = em.getSearchFactory().buildQueryBuilder().forEntity( Bretzel.class ).get(); Query allQuery = queryBuilder.all().createQuery(); FullTextQuery fullTextQuery = em.createFullTextQuery( allQuery, Bretzel.class ); return fullTextQuery.getResultSize(); } }
@Override @SuppressWarnings("unchecked") protected void execute(FullTextSession fts) { long bookCount = ctx.bookIdCounter.get(); String phrase = PHRASES[(int) ( bookCount % PHRASES.length )]; Query q = fts.getSearchFactory() .buildQueryBuilder() .forEntity( Book.class ) .get() .phrase() .withSlop( 3 ) .onField( "summary" ) .sentence( phrase ) .createQuery(); List<Book> result = fts.createFullTextQuery( q, Book.class ).list(); if ( ctx.testContext.assertQueryResults ) { assertResult( result, phrase ); assertResultSize( result, phrase, bookCount ); } }
@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() ); }
@Override public boolean isDisabled() { Boolean retVal = ourDisabled; if (retVal == null) { retVal = new TransactionTemplate(myTxManager).execute(t -> { try { FullTextEntityManager em = org.hibernate.search.jpa.Search.getFullTextEntityManager(myEntityManager); em.getSearchFactory().buildQueryBuilder().forEntity(ResourceTable.class).get(); return Boolean.FALSE; } catch (Exception e) { ourLog.trace("FullText test failed", e); ourLog.debug("Hibernate Search (Lucene) appears to be disabled on this server, fulltext will be disabled"); return Boolean.TRUE; } }); ourDisabled = retVal; } assert retVal != null; return retVal; }
private Query queryForRangeOnFieldSorted(int min, int max, String fieldName) { ExtendedSearchIntegrator integrator = factoryHolder.getSearchFactory(); QueryBuilder queryBuilder = integrator.buildQueryBuilder().forEntity( Person.class ).get(); return queryBuilder .range() .onField( fieldName ) .from( min ) .to( max ) .createQuery(); }
/** * @param fields * @param text * @return full text query */ protected QueryBuilder getFullTextQueryBuilder() { FullTextSession fullTextSession = getFullTextSession(); return fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(getEntityClass()).get(); }
private FullTextQuery getSearchQuery(String searchTerm) { FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(getEntityManager()); QueryBuilder userQueryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder() .forEntity(User.class).get(); BooleanJunction<?> booleanJunction = userQueryBuilder.bool(); if (StringUtils.hasText(searchTerm)) { booleanJunction.must(userQueryBuilder .keyword() .fuzzy().withPrefixLength(1).withThreshold(0.8F) .onField(Binding.user().userName().getPath()) .andField(Binding.user().fullName().getPath()) .matching(searchTerm) .createQuery()); } else { booleanJunction.must(userQueryBuilder.all().createQuery()); } return fullTextEntityManager.createFullTextQuery(booleanJunction.createQuery(), User.class); }