String name = getClusteringEngineName(rb); SearchClusteringEngine engine = searchClusteringEngines.get(name); if (engine != null) { checkAvailable(name, engine); Set<String> fields = engine.getFieldsToLoad(rb.req); if (fields == null || fields.size() == 0) {
final String name = getClusteringEngineName(rb); boolean useResults = params.getBool(ClusteringParams.USE_SEARCH_RESULTS, false); if (useResults == true) { SearchClusteringEngine engine = searchClusteringEngines.get(name); if (engine != null) { checkAvailable(name, engine); DocListAndSet results = rb.getResults(); Map<SolrDocument,Integer> docIds = new HashMap<>(results.docList.size()); SolrDocumentList solrDocList = docListToSolrDocumentList( results.docList, rb.req.getSearcher(), engine.getFieldsToLoad(rb.req), docIds); Object clusters = engine.cluster(rb.getQuery(), solrDocList, docIds, rb.req); DocumentClusteringEngine engine = documentClusteringEngines.get(name); if (engine != null) { checkAvailable(name, engine); boolean useDocSet = params.getBool(ClusteringParams.USE_DOC_SET, false); NamedList<?> nl = null;
setupDefaultEngine("search results clustering", searchClusteringEngines); setupDefaultEngine("document clustering", documentClusteringEngines);
@Override public void finishStage(ResponseBuilder rb) { SolrParams params = rb.req.getParams(); if (!params.getBool(COMPONENT_NAME, false) || !params.getBool(ClusteringParams.USE_SEARCH_RESULTS, false)) { return; } if (rb.stage == ResponseBuilder.STAGE_GET_FIELDS) { String name = getClusteringEngineName(rb); SearchClusteringEngine engine = searchClusteringEngines.get(name); if (engine != null) { checkAvailable(name, engine); SolrDocumentList solrDocList = (SolrDocumentList) rb.rsp.getResponse(); // TODO: Currently, docIds is set to null in distributed environment. // This causes CarrotParams.PRODUCE_SUMMARY doesn't work. // To work CarrotParams.PRODUCE_SUMMARY under distributed mode, we can choose either one of: // (a) In each shard, ClusteringComponent produces summary and finishStage() // merges these summaries. // (b) Adding doHighlighting(SolrDocumentList, ...) method to SolrHighlighter and // making SolrHighlighter uses "external text" rather than stored values to produce snippets. Map<SolrDocument,Integer> docIds = null; Object clusters = engine.cluster(rb.getQuery(), solrDocList, docIds, rb.req); rb.rsp.add("clusters", clusters); } else { log.warn("No engine named: " + name); } } }