package com.manning.hsia.dvdstore; import com.manning.hsia.test.Product; import com.manning.hsia.test.ch13.SearchTestCase; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.*; import org.hibernate.Transaction; import org.hibernate.search.FullTextQuery; 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.hibernate.search.store.FSDirectoryProvider; import org.testng.annotations.Test; import org.testng.annotations.BeforeClass; import java.io.File; import java.util.List; public class TestBoostingQuery extends SearchTestCase { public Searcher searcher; @Test(groups="ch13") public void testBoostingQuery() throws Exception { FullTextSession session = Search.getFullTextSession( openSession() ); Transaction tx = session.beginTransaction(); Query positiveQuery = new TermQuery( new Term( "description", "salesman" ) ); Query negativeQuery = new TermQuery( new Term( "description", "reeves" ) ); Query query = new BoostingQuery( positiveQuery, negativeQuery, 0.5F ); System.out.println( query.toString() ); org.hibernate.search.FullTextQuery hibQuery = session.createFullTextQuery( query, Product.class ); hibQuery.setProjection( FullTextQuery.DOCUMENT, FullTextQuery.SCORE, FullTextQuery.DOCUMENT_ID ); try { List<Object[]> results = hibQuery.list(); assert results.size() > 0 : "no reults returned"; IndexSearcher indexSearcher = getSearcher( session ); for (Object[] result : results) { System.out.println( "score => " + result[1] ); System.out.println( indexSearcher.explain( query, (Integer) result[2] ).toString() ); } tx.commit(); } finally { session.close(); } } private IndexSearcher getSearcher( FullTextSession session ) { SearchFactory searchFactory = session.getSearchFactory(); DirectoryProvider provider = searchFactory.getDirectoryProviders( Product.class )[0]; ReaderProvider readerProvider = searchFactory.getReaderProvider(); IndexReader reader = readerProvider.openReader( provider ); return new IndexSearcher( reader ); } @BeforeClass(groups="ch13", alwaysRun=true) protected void setUp() throws Exception { File sub = locateBaseDir(); File[] files = sub.listFiles(); if ( files != null ) { for (File file : files) { if ( file.isDirectory() ) { delete( file ); } } } copyIndexes(); buildSessionFactory( getMappings(), getAnnotatedPackages(), getXmlFiles() ); } protected Class[] getMappings() { return new Class[]{ Product.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() ); } }