/** * {@inheritDoc} * * <p>Search implementation using Compass. */ @SuppressWarnings("unchecked") public List<T> search(String q, Class clazz) { if (q == null || "".equals(q.trim())) { return getAll(); } List<T> results = new ArrayList<T>(); CompassSearchCommand command = new CompassSearchCommand(q); CompassSearchResults compassResults = compass.search(command); CompassHit[] hits = compassResults.getHits(); if (log.isDebugEnabled() && clazz != null) { log.debug("Filtering by type: " + clazz.getName()); } for (CompassHit hit : hits) { if (clazz != null) { if (hit.data().getClass().equals(clazz)) { results.add((T) hit.data()); } } else { results.add((T) hit.data()); } } if (log.isDebugEnabled()) { log.debug("Number of results for '" + q + "': " + results.size()); } return results; }
/* (non-Javadoc) * @see org.springframework.web.servlet.mvc.AbstractController#handleRequestInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override protected ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception { String query = request.getParameter("query"); if (StringUtils.isBlank(query)) { return new ModelAndView(getSearchView()); } String p = request.getParameter("p"); int currentPage = 1; if (NumberUtils.isNumber(p)) { currentPage = Integer.parseInt(p); } if (currentPage < 1) { currentPage = 1; } CompassSearchCommand searchCommand = new CompassSearchCommand(); searchCommand.setPage(new Integer(currentPage - 1)); searchCommand.setQuery(query); ModelAndView mv = new ModelAndView(); mv.addObject("query", query); mv.addObject("p", currentPage); List<String> errors = new ArrayList<String>(); try { CompassSearchResults searchResults = searchHelper.search(searchCommand); List<CompassHitWapper> hits = new ArrayList<CompassHitWapper>(); for (int i = 0; i < searchResults.getHits().length; i++) { CompassHitWapper hit = new CompassHitWapper(searchResults.getHits()[i]); hits.add(hit); } CompassSearchResultsWrapper results = new CompassSearchResultsWrapper(searchResults); results.setHits(hits); mv.addObject(getSearchResultsName(), results); } catch (SearchEngineQueryParseException ex) { errors.add(TextUtil.escapeHTML(ex.getMessage())); mv.addObject("errors", errors); } catch (Exception ex) { errors.add(TextUtil.escapeHTML(ex.getMessage())); mv.addObject("errors", errors); } mv.setViewName(getSearchResultsView()); return mv; }