private void searchKeywordWithExpectedNumberOfResults(FullTextSession fullTextSession, String fieldName, String termValue, int expectedNumberOfResults) throws Exception { TermQuery query = new TermQuery( new Term( fieldName, termValue ) ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Value.class ); @SuppressWarnings("unchecked") List<Value> valueList = fullTextQuery.list(); assertEquals( "Wrong number of results", expectedNumberOfResults, valueList.size() ); }
@SuppressWarnings("unchecked") private static <T> List<T> doSearch(Session session, Class<T> clazz, Integer entityId) { FullTextSession fullTextSession = Search.getFullTextSession( session ); Transaction tx = fullTextSession.beginTransaction(); FullTextQuery query = fullTextSession.createFullTextQuery( new TermQuery( new Term( "id", entityId.toString() ) ), clazz ); List<T> result = query.list(); tx.commit(); return result; } }
private List<WorkingPerson> search(String field, String value) { FullTextSession session = Search.getFullTextSession( getSession() ); @SuppressWarnings("unchecked") List<WorkingPerson> result = session .createFullTextQuery( searchQueryForValue( field, value, session ) ) .list(); return result; }
@Test public void testTargetNumericEncodedFieldWithStringQueryThrowsException() { TermQuery query = new TermQuery( new Term( "value", "bar" ) ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, B.class ); try { fullTextQuery.list(); fail(); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000233" ) ); } }
@Test public void testObjectTypeFilteringSingleClass() throws Exception { Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Music.class ); List result = fullTextQuery.list(); assertEquals( "Should match the music only", 1, result.size() ); tx.commit(); fullTextSession.close(); }
private void assertElmoIndexed(FullTextSession fullTextSession, boolean indexed) { Query matchAllQuery = new MatchAllDocsQuery(); FullTextQuery query = fullTextSession.createFullTextQuery( matchAllQuery, Muppet.class ); if ( indexed ) { assertEquals( "Elmo should be there", 1, query.list().size() ); Muppet muppet = (Muppet) query.list().get( 0 ); assertEquals( "Index muppet is not Elmo", "Elmo", muppet.getName() ); } else { assertEquals( "Elmo should not be there", 0, query.list().size() ); } }
@Test public void testTargetStringEncodedFieldWithNumericRangeQueryThrowsException() { Query query = NumericFieldUtils.createNumericRangeQuery( "value", 1, 1, true, true ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, A.class ); try { fullTextQuery.list(); fail(); } catch (SearchException e) { assertTrue( "Unexpected error message: " + e.getMessage(), e.getMessage().startsWith( "HSEARCH000232" ) ); } }
@SuppressWarnings("unchecked") private List<IndexedEntity> searchIndexedEntity(Session session, String field, Object value) { FullTextSession fullTextSession = Search.getFullTextSession( session ); QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder() .forEntity( IndexedEntity.class ).get(); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( queryBuilder.keyword().onField( field ).matching( value ).createQuery(), IndexedEntity.class ); return (List<IndexedEntity>) fullTextQuery.list(); }
@Test public void testImplicitObjectTypeFiltering() throws Exception { Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery ); List result = fullTextQuery.list(); assertEquals( "Should match all types", 3, result.size() ); tx.commit(); fullTextSession.close(); }
private void assertCorrectNumberOfClocksNoTimeout() { FullTextQuery hibernateQuery = fts.createFullTextQuery( allSeikoClocksQuery, Clock.class ); final List results = hibernateQuery.list(); assertEquals( 500, results.size() ); fts.clear(); }
@Test public void testObjectTypeFilteringTwoClasses() throws Exception { Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Author.class, Music.class ); List result = fullTextQuery.list(); assertEquals( "Should match the author and music only", 2, result.size() ); tx.commit(); fullTextSession.close(); }
private void assertExecutionTimeoutOccursOnList() { FullTextQuery hibernateQuery = fts.createFullTextQuery( allSwatchClocksQuery, Clock.class ); hibernateQuery.limitExecutionTimeTo( 1, TimeUnit.NANOSECONDS ); List result = hibernateQuery.list(); System.out.println( "Result size early: " + result.size() ); assertEquals( "Test early failure, before the number of results are even fetched", 0, result.size() ); if ( result.size() == 0 ) { //sometimes, this assertTrue( hibernateQuery.hasPartialResults() ); } fts.clear(); }
@Test public void testObjectTypeFilteringThreeClasses() throws Exception { Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fullTextSession = Search.getFullTextSession( session ); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery, Author.class, Music.class, Book.class ); List result = fullTextQuery.list(); assertEquals( "Should match the author, music and book", 3, result.size() ); fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery ); result = fullTextQuery.list(); assertEquals( "Should match all types", 3, result.size() ); tx.commit(); fullTextSession.close(); }
private void assertNumberOfAnimals(FullTextSession s, int count) throws Exception { QueryParser parser = new QueryParser( "name", TestConstants.stopAnalyzer ); Query query = parser.parse( "Elephant OR White Pointer OR Chimpanzee OR Dove or Eagle" ); List result = s.createFullTextQuery( query, Animal.class ).list(); assertNotNull( result ); assertEquals( "Wrong number of hits. There should be one elephant and one shark.", count, result.size() ); }
@Test public void testBooleanProperty() throws Exception { Session s = openSession(); FullTextSession session = Search.getFullTextSession( s ); Transaction tx = s.beginTransaction(); QueryDescriptor query = ElasticsearchQueries.fromJson( "{ 'query': { 'term' : { 'active' : 'true' } } }" ); List<?> result = session.createFullTextQuery( query, GolfPlayer.class ) .setProjection( ElasticsearchProjectionConstants.ID ) .list(); assertThat( result ).hasSize( 1 ); Object[] projection = (Object[]) result.iterator().next(); assertThat( projection[0] ).isEqualTo( 1L ); tx.commit(); s.close(); }
private void assertExecutionTimeoutHasNoPartialResult() { FullTextQuery hibernateQuery = fts.createFullTextQuery( allSeikoClocksQuery, Clock.class ); hibernateQuery.limitExecutionTimeTo( 30, TimeUnit.SECONDS ); List results = hibernateQuery.list(); assertEquals( "Test below limit termination", 500, results.size() ); assertFalse( hibernateQuery.hasPartialResults() ); fts.clear(); }
public void assertFindsByRoadName(String analyzedRoadname) { FullTextSession fullTextSession = Search.getFullTextSession( openSession() ); Transaction tx = fullTextSession.beginTransaction(); TermQuery ftQuery = new TermQuery( new Term( "stops.roadName", analyzedRoadname ) ); FullTextQuery query = fullTextSession.createFullTextQuery( ftQuery, BusLine.class ); query.setProjection( "busLineName" ); assertEquals( 1, query.list().size() ); List results = query.list(); String resultName = (String) ( (Object[]) results.get( 0 ) )[0]; assertEquals( "Linea 64", resultName ); tx.commit(); fullTextSession.close(); }
private void assertExists(FullTextSession s, String keyword, String expectedProjection) { QueryBuilder queryBuilder = s.getSearchFactory().buildQueryBuilder().forEntity( CheeseRollingCompetitor.class ).get(); Query q = queryBuilder.keyword().onField( "Nickname" ).matching( keyword ).createQuery(); FullTextQuery fullTextQuery = s.createFullTextQuery( q, CheeseRollingCompetitor.class ).setProjection( "Nickname" ); List list = fullTextQuery.list(); Assert.assertEquals( 1, list.size() ); Assert.assertEquals( expectedProjection, ( (Object[]) list.get( 0 ) )[0] ); s.clear(); }
@Test public void testDynamicShardsAreTargetingInQuery() throws Exception { insert( elephant, spider, bear ); Session session = openSession(); Transaction tx = session.beginTransaction(); FullTextSession fts = Search.getFullTextSession( session ); QueryParser parser = new QueryParser( "id", TestConstants.stopAnalyzer ); List results = fts.createFullTextQuery( parser.parse( "name:bear OR name:elephant OR name:spider" ) ).list(); assertEquals( "Either double insert, single update, or query fails with shards", 3, results.size() ); tx.commit(); session.close(); }
@Test public void testStringMappedNumericProperty() throws Exception { Session s = openSession(); FullTextSession session = Search.getFullTextSession( s ); Transaction tx = s.beginTransaction(); QueryDescriptor query = ElasticsearchQueries.fromJson( "{ 'query': { 'match' : { 'puttingStrength' : '2.5' } } }" ); List<?> result = session.createFullTextQuery( query, GolfPlayer.class ) .setProjection( ElasticsearchProjectionConstants.ID, "puttingStrength" ) .list(); assertThat( result ).hasSize( 1 ); Object[] projection = (Object[]) result.iterator().next(); assertThat( projection[0] ).isEqualTo( 1L ); assertThat( projection[1] ).isEqualTo( 2.5D ); tx.commit(); s.close(); }