X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/c66976ca63d87026c294511f957addb549ead332..676033bb2153abfec833228c1950ca68d89e3973:/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/SearchResultBuilder.java diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/SearchResultBuilder.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/SearchResultBuilder.java index 05b328aac7..dee216f54e 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/SearchResultBuilder.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/SearchResultBuilder.java @@ -141,6 +141,60 @@ public class SearchResultBuilder implements ISearchResultBuilder { return searchResults; } + + /** + * {@inheritDoc} + * + */ + public List> createResultSet(TopDocs topDocs, + String[] highlightFields, ICdmEntityDao dao, Map idFields, List propertyPaths) throws CorruptIndexException, IOException { + + List> searchResults = new ArrayList>(); + + if(topDocs == null){ + return searchResults; + } + + SearchResultHighligther highlighter = null; + if(highlightFields != null && highlightFields.length > 0){ + highlighter = new SearchResultHighligther(); + } + + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + + String cdmEntityId = null; + SearchResult searchResult = new SearchResult(); + + Document document = luceneSearch.getSearcher().doc(scoreDoc.doc); + searchResult.addDoc(document); + + if(cdmEntityId == null){ + cdmEntityId = findId(idFields, document); + } + + //TODO use findByUuid(List uuids, List criteria, List propertyPaths) + // instead or even better a similar findById(List ids) however this is not yet implemented + if(cdmEntityId != null){ + T entity = dao.load(Integer.valueOf(cdmEntityId), propertyPaths); + searchResult.setEntity(entity); + } + searchResult.setScore(scoreDoc.score); + searchResult.setMaxScore(scoreDoc.score); + // add highlight fragments + if(highlighter != null){ + Map fieldFragmentMap = null; + for(Document doc: searchResult.getDocs()){ + fieldFragmentMap = merge(fieldFragmentMap, highlighter.getFragmentsWithHighlightedTerms(luceneSearch.getAnalyzer(), query, highlightFields, doc, fragmentNumber, fragmentSize)); + } + searchResult.setFieldHighlightMap(fieldFragmentMap); + } + + // finally add the final result to the list + searchResults.add(searchResult); + } + + return searchResults; + } /** * @param base