package querqy.lucene.rewrite; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.KeywordAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.RandomIndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.util.LuceneTestCase; import org.junit.Before; import org.junit.Test; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Created by rene on 04/09/2016. */ public class DependentTermQueryTest extends LuceneTestCase { FieldBoost fieldBoost1 = new ConstantFieldBoost(1f); FieldBoost fieldBoost2 = new ConstantFieldBoost(2f); DocumentFrequencyAndTermContextProvider dfc1 = mock(DocumentFrequencyAndTermContextProvider.class); DocumentFrequencyAndTermContextProvider dfc2 = mock(DocumentFrequencyAndTermContextProvider.class); Term term1 = new Term("f1", "t1"); Term term2 = new Term("f1", "t2"); int tqIndex1 = 1; int tqIndex2 = 2; @Before public void setUp() throws Exception { super.setUp(); when(dfc1.termIndex()).thenReturn(tqIndex1); when(dfc2.termIndex()).thenReturn(tqIndex2); } @Test public void testThatHashCodeAndEqualDoNotDependOnDfc() throws Exception { DependentTermQuery tq1 = new DependentTermQuery(term1, dfc1, tqIndex1, fieldBoost1); DependentTermQuery tq2 = new DependentTermQuery(term1, dfc2, tqIndex1, fieldBoost1); assertEquals(tq1.hashCode(), tq2.hashCode()); assertEquals(tq1, tq2); } @Test public void testThatHashCodeAndEqualDependOnTerm() throws Exception { DependentTermQuery tq1 = new DependentTermQuery(term1, dfc1, tqIndex1, fieldBoost1); DependentTermQuery tq2 = new DependentTermQuery(term2, dfc1, tqIndex1, fieldBoost1); assertNotEquals(tq1.hashCode(), tq2.hashCode()); assertNotEquals(tq1, tq2); } @Test public void testThatHashCodeAndEqualDependOnTqIndex() throws Exception { DependentTermQuery tq1 = new DependentTermQuery(term1, dfc1, tqIndex1, fieldBoost1); DependentTermQuery tq2 = new DependentTermQuery(term1, dfc1, tqIndex2, fieldBoost1); assertNotEquals(tq1.hashCode(), tq2.hashCode()); assertNotEquals(tq1, tq2); } @Test public void testThatHashCodeAndEqualDependOnFieldBoost() throws Exception { DependentTermQuery tq1 = new DependentTermQuery(term1, dfc1, tqIndex1, fieldBoost1); DependentTermQuery tq2 = new DependentTermQuery(term1, dfc1, tqIndex1, fieldBoost2); assertNotEquals(tq1.hashCode(), tq2.hashCode()); assertNotEquals(tq1, tq2); } @Test public void testThatResultsAreFound() throws Exception { ConstantFieldBoost fieldBoost = new ConstantFieldBoost(1f); Analyzer analyzer = new KeywordAnalyzer(); Directory directory = newDirectory(); RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory, analyzer); TestUtil.addNumDocs("f1", "v1", indexWriter, 1); TestUtil.addNumDocs("f1", "v2", indexWriter, 1); indexWriter.close(); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = newSearcher(indexReader); DocumentFrequencyCorrection dfc = new DocumentFrequencyCorrection(); Term term = new Term("f1", "v1"); dfc.prepareTerm(term); DependentTermQuery query = new DependentTermQuery(term, dfc, fieldBoost); TopDocs topDocs = indexSearcher.search(query, 10); assertEquals(1, topDocs.totalHits); Document resultDoc = indexSearcher.doc(topDocs.scoreDocs[0].doc); assertEquals("v1", resultDoc.get("f1")); indexReader.close(); directory.close(); analyzer.close(); } }