package com.manning.hsia.dvdstore;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.RangeQuery;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.store.FSDirectoryProvider;
import com.manning.hsia.test.SearchTestCase;
import org.testng.annotations.Test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class TestGoodRangeQuery extends SearchTestCase {
private static final int INDEX_START = 1000;
int[] numbers = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
@Test(groups="ch07")
public void testNumericRangeQuery() throws Exception {
FullTextSession session = Search.getFullTextSession( openSession() );
Transaction tx = session.beginTransaction();
try {
buildIndex( session, tx );
Term lower = new Term( "number", "00001" );
Term upper = new Term( "number", "00003" );
tx = session.beginTransaction();
RangeQuery query = new RangeQuery( lower, upper, true );
System.out.println( query.toString() );
org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery( query, PaddedNum.class );
List<PaddedNum> results = hibQuery.list();
List<Integer> numbers = new ArrayList<Integer>();
for (PaddedNum num : results) {
numbers.add( num.getNumber() );
System.out.println( num.getNumber() );
}
assert results.size() == 3 : "incorrect return count";
assert !numbers.contains( 10 );
for (Object element : session.createQuery( "from " + PaddedNum.class.getName() ).list())
session.delete( element );
tx.commit();
}
finally {
session.close();
}
}
private void buildIndex( FullTextSession session, Transaction tx ) {
for (int x = INDEX_START; x < numbers.length + INDEX_START; x++) {
PaddedNum num = new PaddedNum();
num.setId( x );
num.setNumber( numbers[x - INDEX_START] );
session.save( num );
}
tx.commit();
session.clear();
}
protected Class[] getMappings() {
return new Class[]{
PaddedNum.class
};
}
protected void configure( org.hibernate.cfg.Configuration cfg ) {
cfg.setProperty( "hibernate.search.default.directory_provider", FSDirectoryProvider.class.getName() );
File sub = locateBaseDir();
cfg.setProperty( "hibernate.search.default.indexBase", sub.getAbsolutePath() );
}
}