public void testSearch(String[] record, int topDocLimit, int resultLimit) { SynonymRecordSearcher recSearcher = new SynonymRecordSearcher(record.length); for (int i = 0; i < record.length; i++) { initIdx( PluginUtil.getPluginInstallPath(HandLuceneImplTest.PLUGIN_ID).concat("data/idx") + (i + 1)); SynonymIndexSearcher searcher = new SynonymIndexSearcher( PluginUtil.getPluginInstallPath(HandLuceneImplTest.PLUGIN_ID).concat("data/idx") + (i + 1)); searcher.setTopDocLimit(topDocLimit); recSearcher.addSearcher(searcher, i); } try { TopDocs topDocs; int hits = 1; for (int i = 0; i < record.length; i++) { topDocs = recSearcher.getSearcher(i).searchDocumentBySynonym(record[i]); hits *= topDocs.totalHits; } List<OutputRecord> results = recSearcher.search(resultLimit, record); Assert.assertNotNull(results); Assert.assertFalse(results.isEmpty()); for (OutputRecord outputRecord : results) { Assert.assertNotNull(outputRecord); String[] resultingRecord = outputRecord.getRecord(); Assert.assertEquals(record.length, resultingRecord.length); System.out.println(StringUtils.join(resultingRecord, '|')); System.out.println("\t" + outputRecord.getScore()); } Assert.assertEquals(Math.min(hits, resultLimit), results.size()); for (int i = 0; i < record.length; i++) { recSearcher.getSearcher(i).close(); } } catch (ParseException e) { e.printStackTrace(); fail("should not get an exception here"); } catch (IOException e) { e.printStackTrace(); fail("should not get an exception here"); } System.out.println(""); }
private int testRecordResultCompute(String[][] wordresults) { int nbDuplicateFound = 0; // prepare wordresults List<List<WordResult>> wordResults = new ArrayList<List<WordResult>>(); for (String[] elts : wordresults) { List<WordResult> wrs = new ArrayList<WordResult>(); for (String elt : elts) { WordResult wr = new WordResult(); wr.input = "input " + elt; wr.word = "word " + elt; wr.score = Integer.valueOf(elt); wrs.add(wr); } wordResults.add(wrs); } // --- compute output results as a list RecordResult recRes = new RecordResult(); recRes.record = initializeRecordToSearch(wordresults); recRes.wordResults.addAll(wordResults); List<OutputRecord> expectedOutputRows = null; expectedOutputRows = new ArrayList<OutputRecord>(); SynonymRecordSearcher.RecordResult.computeOutputRows( wordresults.length, new ArrayList<WordResult>(), recRes.wordResults, expectedOutputRows); for (OutputRecord outputRecord : expectedOutputRows) { System.out.println(outputRecord); } // --- test that duplicates are removed when using a set instead of a list Set<OutputRecord> uniques = new HashSet<OutputRecord>(); uniques.addAll(expectedOutputRows); Assert.assertTrue(uniques.size() <= expectedOutputRows.size()); if (uniques.size() < expectedOutputRows.size()) { nbDuplicateFound++; } List<OutputRecord> outputRows = recRes.computeOutputRows(); // --- check some assertions // verify number of results int expectedNbOutput = 1; for (String[] in : wordresults) { expectedNbOutput *= Math.max(in.length, 1); } Assert.assertEquals(expectedNbOutput, expectedOutputRows.size()); Assert.assertTrue(expectedOutputRows.size() >= outputRows.size()); for (OutputRecord outputRecord : outputRows) { boolean found = false; for (OutputRecord expectedRecord : expectedOutputRows) { if (expectedRecord.equals(outputRecord)) { found = true; break; } } Assert.assertTrue("Record not found: " + outputRecord, found); } return nbDuplicateFound; }