package com.manning.hsia.dvdstore;
import com.manning.hsia.test.SearchTestCase;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.FuzzyTermEnum;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.reader.ReaderProvider;
import org.hibernate.search.store.DirectoryProvider;
import org.testng.annotations.Test;
public class TestFuzzyTermEnum extends SearchTestCase {
String[] titles = new String[]{"Titan A.E.", "Little Women", "Little Shop of Horrors",
"The Green Mile", "Somewhere in Time"};
@Test(groups="ch07")
public void testFuzzyQueryEnum() throws Exception {
FullTextSession session = Search.getFullTextSession( openSession() );
Transaction tx = session.beginTransaction();
buildIndex( session, tx );
String userInput = "title";
tx = session.beginTransaction();
FuzzyTermEnum termEnum = new FuzzyTermEnum( getReader( session ), new Term( "title", userInput ), 0.4F );
try {
System.out.println( termEnum.term().text() );
while (termEnum.next()) {
System.out.println( termEnum.term().text() );
}
for (Object element : session.createQuery( "from " + Dvd.class.getName() ).list()) session.delete( element );
tx.commit();
}
finally {
if ( termEnum != null ) {
termEnum.close();
}
session.close();
}
}
private void buildIndex( FullTextSession session, Transaction tx ) {
for (int x = 0; x < titles.length; x++) {
Dvd dvd = new Dvd();
dvd.setTitle( titles[x] );
dvd.setId( x );
session.save( dvd );
}
tx.commit();
session.clear();
}
private IndexReader getReader( FullTextSession session ) {
SearchFactory searchFactory = session.getSearchFactory();
DirectoryProvider provider = searchFactory.getDirectoryProviders( Dvd.class )[0];
ReaderProvider readerProvider = searchFactory.getReaderProvider();
return readerProvider.openReader( provider );
}
protected Class[] getMappings() {
return new Class[]{
Dvd.class
};
}
}