private FullTextQuery buildQuery() { Query query; try { query = prepareQuery(); } catch (ParseException e) { throw new IllegalStateException("Invalid query", e); } FullTextQuery fullTextQuery = getFullTextSession().createFullTextQuery(query, getType()); fullTextQuery.enableFullTextFilter("termsFilterFactory").setParameter("includeTerms", includeTerms) .setParameter("excludeTerms", excludeTerms); fullTextQuery.setFilter(termsFilter); adjustFullTextQuery(fullTextQuery); return fullTextQuery; }
@Test public void testElasticsearchFilter() { Session s = openSession(); FullTextSession fullTextSession = Search.getFullTextSession( s ); Transaction tx = s.beginTransaction(); FullTextQuery ftQuery = fullTextSession.createFullTextQuery( ElasticsearchQueries.fromJson( "{ 'query': { 'match_all': {} } }" ), Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); assertThat( ftQuery.list() ).extracting( "name" ).containsExactlyInAnyOrder( "Liz", "Emmanuel" ); TermQuery termQuery = new TermQuery( new Term( "name", "liz" ) ); Filter termFilter = new QueryWrapperFilter( termQuery ); ftQuery.setFilter( termFilter ); assertThat( ftQuery.list() ).extracting( "name" ).containsExactlyInAnyOrder( "Liz" ); tx.commit(); s.close(); }
@Test public void testStraightFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); TermQuery termQuery = new TermQuery( new Term( "name", "liz" ) ); Filter termFilter = new QueryWrapperFilter( termQuery ); ftQuery.setFilter( termFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.setFilter( termFilter ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "security" ).setParameter( "login", "andre" ); ftQuery.disableFullTextFilter( "security" ); ftQuery.disableFullTextFilter( "bestDriver" ); ftQuery.setFilter( null ); assertEquals( "Should not filter anymore", 3, ftQuery.getResultSize() ); }
@Test public void testStraightFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); TermQuery termQuery = new TermQuery( new Term( "name", "liz" ) ); Filter termFilter = new QueryWrapperFilter( termQuery ); ftQuery.setFilter( termFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.setFilter( termFilter ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "security" ).setParameter( "login", "andre" ); ftQuery.disableFullTextFilter( "security" ); ftQuery.disableFullTextFilter( "bestDriver" ); ftQuery.setFilter( null ); assertEquals( "Should not filter anymore", 3, ftQuery.getResultSize() ); }
@TestForIssue(jiraKey = "HSEARCH-1513") @Test @Category(SkipOnElasticsearch.class) // The Elasticsearch backend does not support custom Lucene filters. public void testCachedEmptyFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); Calendar calendar = GregorianCalendar.getInstance( TimeZone.getTimeZone( "GMT" ), Locale.ROOT ); calendar.set( Calendar.YEAR, 2001 ); long from = DateTools.round( calendar.getTime().getTime(), DateTools.Resolution.YEAR ); calendar.set( Calendar.YEAR, 2005 ); long to = DateTools.round( calendar.getTime().getTime(), DateTools.Resolution.YEAR ); Filter dateFilter = NumericRangeFilter.newLongRange( "delivery", from, to, true, true ); ftQuery.setFilter( dateFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "cached_empty" ); assertEquals( "two filters, one is empty, should not match anything", 0, ftQuery.getResultSize() ); }
@TestForIssue(jiraKey = "HSEARCH-1513") @Test @Category(SkipOnElasticsearch.class) // The Elasticsearch backend does not support custom Lucene filters. public void testCachedEmptyFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); Calendar calendar = GregorianCalendar.getInstance( TimeZone.getTimeZone( "GMT" ), Locale.ROOT ); calendar.set( Calendar.YEAR, 2001 ); long from = DateTools.round( calendar.getTime().getTime(), DateTools.Resolution.YEAR ); calendar.set( Calendar.YEAR, 2005 ); long to = DateTools.round( calendar.getTime().getTime(), DateTools.Resolution.YEAR ); Filter dateFilter = NumericRangeFilter.newLongRange( "delivery", from, to, true, true ); ftQuery.setFilter( dateFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "cached_empty" ); assertEquals( "two filters, one is empty, should not match anything", 0, ftQuery.getResultSize() ); }
@Test @Category(SkipOnElasticsearch.class) // The Elasticsearch backend does not support custom Lucene filters. public void testEmptyFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); TermQuery termQuery = new TermQuery( new Term( "name", "liz" ) ); Filter termFilter = new QueryWrapperFilter( termQuery ); ftQuery.setFilter( termFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "empty" ); assertEquals( "two filters, one is empty, should not match anything", 0, ftQuery.getResultSize() ); }
@Test @Category(SkipOnElasticsearch.class) // The Elasticsearch backend does not support custom Lucene filters. public void testEmptyFilters() { FullTextQuery ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); TermQuery termQuery = new TermQuery( new Term( "name", "liz" ) ); Filter termFilter = new QueryWrapperFilter( termQuery ); ftQuery.setFilter( termFilter ); assertEquals( "Should select only liz", 1, ftQuery.getResultSize() ); ftQuery = fullTextSession.createFullTextQuery( query, Driver.class ); ftQuery.enableFullTextFilter( "bestDriver" ); ftQuery.enableFullTextFilter( "emptyWithDeprecatedFilterType" ); assertEquals( "two filters, one is empty, should not match anything", 0, ftQuery.getResultSize() ); }