From 57d9d061b518d7e7c9921e62f24ca7e53ea02841 Mon Sep 17 00:00:00 2001 From: ryounes Date: Fri, 29 Apr 2011 18:09:38 +0000 Subject: [PATCH] NIHVIVO-2458 SolrPagedSearchController: remove code supporting alpha parameter, since not used; refinement links. --- .../webapp/dao/jena/ApplicationDaoJena.java | 2 +- .../controller/SolrPagedSearchController.java | 298 +++++++----------- 2 files changed, 123 insertions(+), 177 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java index 900d263f9..ee11ce15f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ApplicationDaoJena.java @@ -78,7 +78,7 @@ public class ApplicationDaoJena extends JenaBaseDao implements ApplicationDao { // namespace with a final slash, so this makes matching easier. // It also accords with the way the default namespace is defined. if (!namespace.endsWith("/")) { - namespace = namespace + "/"; + namespace += "/"; } externallyLinkedNamespaces.add(namespace); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/SolrPagedSearchController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/SolrPagedSearchController.java index e9130f908..eb337858c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/SolrPagedSearchController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/SolrPagedSearchController.java @@ -4,6 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.search.controller; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -159,9 +160,6 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { log.debug("IndividualDao is " + iDao.toString() + " Public classes in the classgroup are " + grpDao.getPublicGroupsWithVClasses().toString()); log.debug("VClassDao is "+ vclassDao.toString() ); - - // RY Not sure where/how this is used *** - //String alphaFilter = vreq.getParameter("alpha"); int startIndex = 0; try{ @@ -182,10 +180,7 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { int maxHitSize = DEFAULT_MAX_SEARCH_SIZE ; if( startIndex >= DEFAULT_MAX_SEARCH_SIZE - hitsPerPage ) maxHitSize = startIndex + DEFAULT_MAX_SEARCH_SIZE ; -// if( alphaFilter != null ){ -// maxHitSize = maxHitSize * 2; -// hitsPerPage = maxHitSize; -// } + log.debug("maxHitSize is " + maxHitSize); String qtxt = vreq.getParameter(VitroQuery.QUERY_PARAMETER_NAME); @@ -339,40 +334,36 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { if (type != null && type.getName() != null) body.put("typeName", type.getName()); } -// -// /* Add classgroup and type refinement links to body */ -// if( wasHtmlRequested ){ -// // Search request includes no classgroup and no type, so add classgroup search refinement links. -// if ( !classGroupFilterRequested && !typeFiltereRequested ) { -// List classgroups = getClassGroups(grpDao, topDocs, searcherForRequest); -// List classGroupLinks = new ArrayList(classgroups.size()); -// for (VClassGroup vcg : classgroups) { -// if (vcg.getPublicName() != null) { -// classGroupLinks.add(new VClassGroupSearchLink(qtxt, vcg)); -// } -// } -// body.put("classGroupLinks", classGroupLinks); -// -// // Search request is for a classgroup, so add rdf:type search refinement links -// // but try to filter out classes that are subclasses -// } else if ( classGroupFilterRequested && !typeFiltereRequested ) { -// List vClasses = getVClasses(vclassDao,topDocs,searcherForRequest); -// List vClassLinks = new ArrayList(vClasses.size()); -// for (VClass vc : vClasses) { -// vClassLinks.add(new VClassSearchLink(qtxt, vc)); -// } -// body.put("classLinks", vClassLinks); -// pagingLinkParams.put("classgroup", classGroupParam); -// -// // This case is never displayed -//// } else if (!StringUtils.isEmpty(alphaFilter)) { -//// body.put("alphas", getAlphas(topDocs, searcherForRequest)); -//// alphaSortIndividuals(beans); -// } else { -// pagingLinkParams.put("type", typeParam); -// } -// } -// + + /* Add classgroup and type refinement links to body */ + if( wasHtmlRequested ){ + // Search request includes no classgroup and no type, so add classgroup search refinement links. + if ( !classGroupFilterRequested && !typeFiltereRequested ) { + List classgroups = getClassGroups(grpDao, docs); + List classGroupLinks = new ArrayList(classgroups.size()); + for (VClassGroup vcg : classgroups) { + if (vcg.getPublicName() != null) { + classGroupLinks.add(new VClassGroupSearchLink(qtxt, vcg)); + } + } + body.put("classGroupLinks", classGroupLinks); + + // Search request is for a classgroup, so add rdf:type search refinement links + // but try to filter out classes that are subclasses + } else if ( classGroupFilterRequested && !typeFiltereRequested ) { + List vClasses = getVClasses(vclassDao, docs); + List vClassLinks = new ArrayList(vClasses.size()); + for (VClass vc : vClasses) { + vClassLinks.add(new VClassSearchLink(qtxt, vc)); + } + body.put("classLinks", vClassLinks); + pagingLinkParams.put("classgroup", classGroupParam); + + } else { + pagingLinkParams.put("type", typeParam); + } + } + // Convert search result individuals to template model objects // RY If this diverges significantly from what's used on the index page, // create a different template model. @@ -407,62 +398,34 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { } } - private void alphaSortIndividuals(List beans) { - Collections.sort(beans, new Comparator< Individual >(){ - public int compare(Individual o1, Individual o2) { - if( o1 == null || o1.getName() == null ) - return 1; - else - return o1.getName().compareTo(o2.getName()); - }}); - } - - private List getAlphas(TopDocs topDocs, IndexSearcher searcher) { - Set alphas = new HashSet(); - for(int i=0;i 0) - alphas.add( name.substring(0, 1)); - } catch (CorruptIndexException e) { - log.debug("Could not get alphas for document",e); - } catch (IOException e) { - log.debug("Could not get alphas for document",e); - } - - } - return new ArrayList(alphas); - } /** * Get the class groups represented for the individuals in the topDocs. */ - private List getClassGroups(VClassGroupDao grpDao, TopDocs topDocs, - IndexSearcher searcherForRequest) { + private List getClassGroups(VClassGroupDao grpDao, SolrDocumentList docs) { LinkedHashMap grpMap = grpDao.getClassGroupMap(); int n = grpMap.size(); HashSet classGroupsInHits = new HashSet(n); int grpsFound = 0; - for(int i=0; i grpsFound ;i++){ + long hitCount = docs.getNumFound(); + for(int i=0; i grpsFound ;i++){ try{ - Document doc = searcherForRequest.doc(topDocs.scoreDocs[i].doc); - Field[] grps = doc.getFields(Entity2LuceneDoc.term.CLASSGROUP_URI); - if(grps != null || grps.length > 0){ - for(int j=0;j grps = doc.getFieldValues(Entity2LuceneDoc.term.CLASSGROUP_URI); + if (grps != null) { + for (Object o : grps) { + String groupUri = o.toString(); if( groupUri != null && ! classGroupsInHits.contains(groupUri)){ classGroupsInHits.add(groupUri); grpsFound++; if( grpsFound >= n ) break; } - } + } } - }catch(Exception e){ + } catch(Exception e) { log.error("problem getting VClassGroups from search hits " + e.getMessage()); } @@ -485,78 +448,9 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { return classgroups; } - private class VClassGroupSearchLink extends LinkTemplateModel { - - VClassGroupSearchLink(String querytext, VClassGroup classgroup) { - super(classgroup.getPublicName(), "/search", "querytext", querytext, "classgroup", classgroup.getURI()); - } - } - - private class VClassSearchLink extends LinkTemplateModel { - - VClassSearchLink(String querytext, VClass type) { - super(type.getName(), "/search", "querytext", querytext, "type", type.getURI()); - } - } - - private List getPagingLinks(int startIndex, int hitsPerPage, long hitCount, int maxHitSize, String baseUrl, ParamMap params) { - List pagingLinks = new ArrayList(); - - // No paging links if only one page of results - if (hitCount <= hitsPerPage) { - return pagingLinks; - } - - for (int i = 0; i < hitCount; i += hitsPerPage) { - params.put("startIndex", String.valueOf(i)); - if ( i < maxHitSize - hitsPerPage) { - int pageNumber = i/hitsPerPage + 1; - if (i >= startIndex && i < (startIndex + hitsPerPage)) { - pagingLinks.add(new PagingLink(pageNumber)); - } else { - pagingLinks.add(new PagingLink(pageNumber, baseUrl, params)); - } - } else { - pagingLinks.add(new PagingLink("more...", baseUrl, params)); - } - } - - return pagingLinks; - } - - private String getPreviousPageLink(int startIndex, int hitsPerPage, String baseUrl, ParamMap params) { - params.put("startIndex", String.valueOf(startIndex-hitsPerPage)); - //return new PagingLink("Previous", baseUrl, params); - return UrlBuilder.getUrl(baseUrl, params); - } - - private String getNextPageLink(int startIndex, int hitsPerPage, String baseUrl, ParamMap params) { - params.put("startIndex", String.valueOf(startIndex+hitsPerPage)); - //return new PagingLink("Next", baseUrl, params); - return UrlBuilder.getUrl(baseUrl, params); - } - - private class PagingLink extends LinkTemplateModel { - - PagingLink(int pageNumber, String baseUrl, ParamMap params) { - super(String.valueOf(pageNumber), baseUrl, params); - } - - // Constructor for current page item: not a link, so no url value. - PagingLink(int pageNumber) { - setText(String.valueOf(pageNumber)); - } - - // Constructor for "more..." item - PagingLink(String text, String baseUrl, ParamMap params) { - super(text, baseUrl, params); - } - } - - private List getVClasses(VClassDao vclassDao, TopDocs topDocs, - IndexSearcher searherForRequest){ - HashSet typesInHits = getVClassUrisForHits(topDocs,searherForRequest); + private List getVClasses(VClassDao vclassDao, SolrDocumentList docs){ + HashSet typesInHits = getVClassUrisForHits(docs); List classes = new ArrayList(typesInHits.size()); Iterator it = typesInHits.iterator(); @@ -582,20 +476,18 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { return classes; } - private HashSet getVClassUrisForHits(TopDocs topDocs, - IndexSearcher searcherForRequest){ - HashSet typesInHits = new HashSet(); - for(int i=0; i getVClassUrisForHits(SolrDocumentList docs){ + HashSet typesInHits = new HashSet(); + for (SolrDocument doc : docs) { + try { + Collection types = doc.getFieldValues(Entity2LuceneDoc.term.RDFTYPE); + if (types != null) { + for (Object o : types) { + String typeUri = o.toString(); typesInHits.add(typeUri); } } - }catch(Exception e){ + } catch (Exception e) { log.error("problems getting rdf:type for search hits",e); } } @@ -629,21 +521,6 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { QueryParser parser = getQueryParser(analyzer); query = parser.parse(querystr); - - String alpha = request.getParameter("alpha"); - - if( alpha != null && !"".equals(alpha) && alpha.length() == 1){ - - log.debug("Firing alpha query "); - log.debug("request.getParameter(alpha) is " + alpha); - - BooleanQuery boolQuery = new BooleanQuery(); - boolQuery.add( query, BooleanClause.Occur.MUST ); - boolQuery.add( - new WildcardQuery(new Term(Entity2LuceneDoc.term.NAME, alpha+'*')), - BooleanClause.Occur.MUST); - query = boolQuery; - } //check if this is classgroup filtered Object param = request.getParameter("classgroup"); @@ -713,6 +590,75 @@ public class SolrPagedSearchController extends FreemarkerHttpServlet { return qp; } + private class VClassGroupSearchLink extends LinkTemplateModel { + + VClassGroupSearchLink(String querytext, VClassGroup classgroup) { + super(classgroup.getPublicName(), "/search", "querytext", querytext, "classgroup", classgroup.getURI()); + } + } + + private class VClassSearchLink extends LinkTemplateModel { + + VClassSearchLink(String querytext, VClass type) { + super(type.getName(), "/search", "querytext", querytext, "type", type.getURI()); + } + } + + private List getPagingLinks(int startIndex, int hitsPerPage, long hitCount, int maxHitSize, String baseUrl, ParamMap params) { + + List pagingLinks = new ArrayList(); + + // No paging links if only one page of results + if (hitCount <= hitsPerPage) { + return pagingLinks; + } + + for (int i = 0; i < hitCount; i += hitsPerPage) { + params.put("startIndex", String.valueOf(i)); + if ( i < maxHitSize - hitsPerPage) { + int pageNumber = i/hitsPerPage + 1; + if (i >= startIndex && i < (startIndex + hitsPerPage)) { + pagingLinks.add(new PagingLink(pageNumber)); + } else { + pagingLinks.add(new PagingLink(pageNumber, baseUrl, params)); + } + } else { + pagingLinks.add(new PagingLink("more...", baseUrl, params)); + } + } + + return pagingLinks; + } + + private String getPreviousPageLink(int startIndex, int hitsPerPage, String baseUrl, ParamMap params) { + params.put("startIndex", String.valueOf(startIndex-hitsPerPage)); + //return new PagingLink("Previous", baseUrl, params); + return UrlBuilder.getUrl(baseUrl, params); + } + + private String getNextPageLink(int startIndex, int hitsPerPage, String baseUrl, ParamMap params) { + params.put("startIndex", String.valueOf(startIndex+hitsPerPage)); + //return new PagingLink("Next", baseUrl, params); + return UrlBuilder.getUrl(baseUrl, params); + } + + private class PagingLink extends LinkTemplateModel { + + PagingLink(int pageNumber, String baseUrl, ParamMap params) { + super(String.valueOf(pageNumber), baseUrl, params); + } + + // Constructor for current page item: not a link, so no url value. + PagingLink(int pageNumber) { + setText(String.valueOf(pageNumber)); + } + + // Constructor for "more..." item + PagingLink(String text, String baseUrl, ParamMap params) { + super(text, baseUrl, params); + } + } + private ExceptionResponseValues doSearchError(Throwable e, Format f) { Map body = new HashMap(); body.put("message", "Search failed: " + e.getMessage());