@Test public void testSearchWithoutAutocomplete() { LimitedResult<List<NameConceptModelIF>> nameModeListLR = nameDAO.search("car", false); assertEquals(0, nameModeListLR.getRows().size()); // test vernacular names when using a part of the name nameModeListLR = nameDAO.search("sali", false); assertEquals(1, nameModeListLR.getRows().size()); }
@Test public void testSearchScoringWithAutocomplete() { // test vernacular names partial match LimitedResult<List<NameConceptModelIF>> nameModeListLR = nameDAO.search("sali", true); assertEquals(1, nameModeListLR.getRows().size()); float saliScore = nameModeListLR.getRows().get(0).getScore(); // make sure that scores make sense nameModeListLR = nameDAO.search("carex sali", true); assertEquals(1, nameModeListLR.getRows().size()); float carexSaliScore = nameModeListLR.getRows().get(0).getScore(); assertTrue( "Full match should have a better score than partial match", carexSaliScore > saliScore); nameModeListLR = nameDAO.search("carex feta", true); assertEquals(1, nameModeListLR.getRows().size()); float carexFetaScore = nameModeListLR.getRows().get(0).getScore(); assertTrue( "Full match should have the same score for taxon and vernacular", carexSaliScore == carexFetaScore); }
/** * Test to make sure that taxon and vernacular are sorted correctly when returned by search * function. Correctly means sorted by score then name. */ @Test public void testTaxonVernacularOrdering() { LimitedResult<List<NameConceptModelIF>> nameModeListLR = nameDAO.search("carex", true); int idx = 0; int carexSabulosaIdx = 0; int carexSaliIdx = 0; for (NameConceptModelIF currName : nameModeListLR.getRows()) { if ("Carex sabulosa".equals(currName.getName())) { carexSabulosaIdx = idx; } else if ("carex sali".equals(currName.getName())) { carexSaliIdx = idx; } idx++; } assertTrue("taxon and vernacular order", carexSabulosaIdx < carexSaliIdx); }
@Test public void testSearch() { // Test asciifolding filter LimitedResult<List<NameConceptModelIF>> nameModeListLR = nameDAO.search("epi", true); assertEquals(1, nameModeListLR.getRows().size()); assertEquals(1, nameModeListLR.getTotal_rows()); assertEquals( "Ascii Folding, search vernacular with accent", new Integer(7174), nameModeListLR.getRows().get(0).getTaxonId()); // Test search using carex fe List<NameConceptModelIF> nameModeList = nameDAO.searchTaxon("carex fe"); // make sure Carex feta is the first element assertEquals( "<em>Carex feta</em> L.H. Bailey", ((NameConceptTaxonModel) nameModeList.get(0)).getNamehtmlauthor()); // make sure Carex alone (951) is not there boolean carexFound = false; for (NameConceptModelIF curr : nameModeList) { if (curr.getTaxonId().intValue() == 951) { carexFound = true; } } assertFalse(carexFound); // Test search carex nameModeListLR = nameDAO.search("carex", true); assertEquals(new Integer(951), nameModeListLR.getRows().get(0).getTaxonId()); // make sure other carex are returned (carex feta) assertTrue(nameModeListLR.getRows().size() > 1); // make sure carex the genus get the higher score assertTrue( nameModeListLR.getRows().get(0).getScore() > nameModeListLR.getRows().get(1).getScore()); // same test with searchTaxon nameModeList = nameDAO.searchTaxon("carex"); assertTrue(nameModeList.get(0).getScore() > nameModeList.get(1).getScore()); // Test fuzzy match // nameModeListLR = nameDAO.search("carox",true); // assertEquals(new Integer(951), nameModeListLR.getRows().get(0).getTaxonId()); // Search for carex feta using the genus first letter nameModeListLR = nameDAO.search("C. feta", true); assertEquals(new Integer(4864), nameModeListLR.getRows().get(0).getTaxonId()); // same test with searchTaxon nameModeList = nameDAO.searchTaxon("C. feta"); assertEquals(new Integer(4864), nameModeList.get(0).getTaxonId()); // Search using the epithet nameModeListLR = nameDAO.search("sabulosa", true); assertEquals(new Integer(5064), nameModeListLR.getRows().get(0).getTaxonId()); // same test with searchTaxon nameModeList = nameDAO.searchTaxon("sabulosa"); assertEquals(new Integer(5064), nameModeList.get(0).getTaxonId()); // Test hybrids // should work without the multiply sign nameModeListLR = nameDAO.search("Achnella", true); assertEquals( "Search hybrid without symbol", new Integer(23238), nameModeListLR.getRows().get(0).getTaxonId()); // should also work with the multiply sign nameModeListLR = nameDAO.search("×Achnella", true); assertEquals( "Search hybrid with symbol", new Integer(23238), nameModeListLR.getRows().get(0).getTaxonId()); // Test searching for a vernacular on taxon index nameModeList = nameDAO.searchTaxon("epi"); assertEquals(0, nameModeList.size()); // Test vernacular nameModeListLR = nameDAO.search("japanese m", true); assertEquals(1, nameModeListLR.getRows().size()); nameModeListLR = nameDAO.search("maple", true); assertEquals(1, nameModeListLR.getRows().size()); // test a synonym with 2 parents nameModeListLR = nameDAO.search("SynonymWithTwoParents", true); assertEquals(new Integer(101010), nameModeListLR.getRows().get(0).getTaxonId()); assertFalse(((NameConceptTaxonModel) nameModeListLR.getRows().get(0)).hasSingleParent()); // Test with paging, do this one last since we change the behavior of the nameDAO // We should not use setPageSize outside testing ((ElasticSearchNameDAO) nameDAO).setPageSize(1); nameModeListLR = nameDAO.search("care", true, 0); assertEquals(1, nameModeListLR.getRows().size()); nameModeListLR = nameDAO.search("care", true, 1); assertEquals(1, nameModeListLR.getRows().size()); }