Package org.hibernate.search.test.filter

Source Code of org.hibernate.search.test.filter.FilterTest

//$Id$
package org.hibernate.search.test.filter;

import java.util.Date;
import java.util.Calendar;

import org.hibernate.search.test.SearchTestCase;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.FullTextQuery;
import org.hibernate.Session;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.RangeFilter;
import org.apache.lucene.index.Term;

/**
* @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
public class FilterTest extends SearchTestCase {

  public void testNamedFilters() {
    createData();
    FullTextSession s = Search.createFullTextSession( openSession( ) );
    s.getTransaction().begin();
    BooleanQuery query = new BooleanQuery();
    query.add( new TermQuery( new Term("teacher", "andre") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "max") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "aaron") ), BooleanClause.Occur.SHOULD );
    FullTextQuery ftQuery = s.createFullTextQuery( query, Driver.class );
    assertEquals("No filter should happen", 3, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "bestDriver");
    assertEquals("Should filter out Gavin", 2, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "bestDriver");
    ftQuery.enableFullTextFilter( "security").setParameter( "login", "andre" );
    assertEquals("Should filter to limit to Emmanuel", 1, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "bestDriver");
    ftQuery.enableFullTextFilter( "security").setParameter( "login", "andre" );
    ftQuery.disableFullTextFilter( "security");
    ftQuery.disableFullTextFilter( "bestDriver");
    assertEquals("Should not filter anymore", 3, ftQuery.getResultSize() );

    s.getTransaction().commit();
    s.close();
    deleteData();
  }

  public void testCache() {
    createData();
    FullTextSession s = Search.createFullTextSession( openSession( ) );
    s.getTransaction().begin();
    BooleanQuery query = new BooleanQuery();
    query.add( new TermQuery( new Term("teacher", "andre") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "max") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "aaron") ), BooleanClause.Occur.SHOULD );
    FullTextQuery ftQuery = s.createFullTextQuery( query, Driver.class );
    assertEquals("No filter should happen", 3, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "cachetest");
    assertEquals("Should filter out all", 0, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "cachetest");
    try {
      ftQuery.getResultSize();
    }
    catch (IllegalStateException e) {
      fail("Cache does not work");
    }

    s.getTransaction().commit();
    s.close();
    deleteData();
  }

  public void testStraightFilters() {
    createData();
    FullTextSession s = Search.createFullTextSession( openSession( ) );
    s.getTransaction().begin();
    BooleanQuery query = new BooleanQuery();
    query.add( new TermQuery( new Term("teacher", "andre") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "max") ), BooleanClause.Occur.SHOULD );
    query.add( new TermQuery( new Term("teacher", "aaron") ), BooleanClause.Occur.SHOULD );
    FullTextQuery ftQuery;

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.enableFullTextFilter( "bestDriver");
    Filter dateFilter = new RangeFilter("delivery", "2001", "2005",
        true, true);
    ftQuery.setFilter( dateFilter );
    assertEquals("Should select only liz", 1, ftQuery.getResultSize() );

    ftQuery = s.createFullTextQuery( query, Driver.class );
    ftQuery.setFilter( dateFilter );
    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() );

    s.getTransaction().commit();
    s.close();
    deleteData();
  }


  private void deleteData() {
    Session s = openSession( );
    s.getTransaction().begin();
    s.createQuery( "delete " + Driver.class.getName() + " t").executeUpdate();
    s.getTransaction().commit();
    s.close();
  }

  private void createData() {
    Session s = openSession( );
    s.getTransaction().begin();
    Calendar cal = Calendar.getInstance();
    cal.set( 2006, 10, 11);
    Driver driver = new Driver();
    driver.setDelivery( cal.getTime() );
    driver.setId( 1 );
    driver.setName( "Emmanuel" );
    driver.setScore( 5 );
    driver.setTeacher( "andre" );
    s.persist( driver );

    cal.set( 2007, 10, 11);
    driver = new Driver();
    driver.setDelivery( cal.getTime() );
    driver.setId( 2 );
    driver.setName( "Gavin" );
    driver.setScore( 3 );
    driver.setTeacher( "aaron" );
    s.persist( driver );

    cal.set( 2004, 10, 11);
    driver = new Driver();
    driver.setDelivery( cal.getTime() );
    driver.setId( 3 );
    driver.setName( "Liz" );
    driver.setScore( 5 );
    driver.setTeacher( "max" );
    s.persist( driver );
    s.getTransaction().commit();
    s.close();
  }

  protected Class[] getMappings() {
    return new Class[] {
        Driver.class,
        Soap.class
    };
  }
}
TOP

Related Classes of org.hibernate.search.test.filter.FilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.