List of usage examples for org.apache.solr.common SolrDocumentList getNumFound
public long getNumFound()
From source file:org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex.java
License:Apache License
private AbstractIterator<SolrResultRow> getIterator(final Filter filter, final IndexPlan plan, final String parent, final int parentDepth, final OakSolrConfiguration configuration, final SolrServer solrServer, final LMSEstimator estimator) { return new AbstractIterator<SolrResultRow>() { public Collection<FacetField> facetFields = new LinkedList<FacetField>(); private final Set<String> seenPaths = Sets.newHashSet(); private final Deque<SolrResultRow> queue = Queues.newArrayDeque(); private int offset = 0; private boolean noDocs = false; private long numFound = 0; @Override//from www. ja va2 s .c o m protected SolrResultRow computeNext() { if (!queue.isEmpty() || loadDocs()) { return queue.remove(); } return endOfData(); } private SolrResultRow convertToRow(SolrDocument doc) { String path = String.valueOf(doc.getFieldValue(configuration.getPathField())); if ("".equals(path)) { path = "/"; } if (!parent.isEmpty()) { path = getAncestorPath(path, parentDepth); // avoid duplicate entries if (seenPaths.contains(path)) { return null; } seenPaths.add(path); } float score = 0f; Object scoreObj = doc.get("score"); if (scoreObj != null) { score = (Float) scoreObj; } return new SolrResultRow(path, score, doc, facetFields); } /** * Loads the Solr documents in batches * @return true if any document is loaded */ private boolean loadDocs() { if (noDocs) { return false; } try { if (log.isDebugEnabled()) { log.debug("converting filter {}", filter); } SolrQuery query = FilterQueryParser.getQuery(filter, plan, configuration); if (numFound > 0) { long rows = configuration.getRows(); long maxQueries = numFound / 2; if (maxQueries > configuration.getRows()) { // adjust the rows to avoid making more than 3 Solr requests for this particular query rows = maxQueries; query.setParam("rows", String.valueOf(rows)); } long newOffset = configuration.getRows() + offset * rows; if (newOffset >= numFound) { return false; } query.setParam("start", String.valueOf(newOffset)); offset++; } if (log.isDebugEnabled()) { log.debug("sending query {}", query); } QueryResponse queryResponse = solrServer.query(query); if (log.isDebugEnabled()) { log.debug("getting response {}", queryResponse.getHeader()); } SolrDocumentList docs = queryResponse.getResults(); if (docs != null) { numFound = docs.getNumFound(); estimator.update(filter, docs); Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); for (SolrDocument doc : docs) { // handle highlight if (highlighting != null) { Object pathObject = doc.getFieldValue(configuration.getPathField()); if (pathObject != null && highlighting.get(String.valueOf(pathObject)) != null) { Map<String, List<String>> value = highlighting.get(String.valueOf(pathObject)); for (Map.Entry<String, List<String>> entry : value.entrySet()) { // all highlighted values end up in 'rep:excerpt', regardless of field match for (String v : entry.getValue()) { doc.addField(QueryImpl.REP_EXCERPT, v); } } } } SolrResultRow row = convertToRow(doc); if (row != null) { queue.add(row); } } } // get facets List<FacetField> returnedFieldFacet = queryResponse.getFacetFields(); if (returnedFieldFacet != null) { facetFields.addAll(returnedFieldFacet); } // filter facets on doc paths if (!facetFields.isEmpty() && docs != null) { for (SolrDocument doc : docs) { String path = String.valueOf(doc.getFieldValue(configuration.getPathField())); // if facet path doesn't exist for the calling user, filter the facet for this doc for (FacetField ff : facetFields) { if (!filter.isAccessible(path + "/" + ff.getName())) { filterFacet(doc, ff); } } } } // handle spellcheck SpellCheckResponse spellCheckResponse = queryResponse.getSpellCheckResponse(); if (spellCheckResponse != null && spellCheckResponse.getSuggestions() != null && spellCheckResponse.getSuggestions().size() > 0) { putSpellChecks(spellCheckResponse, queue, filter, configuration, solrServer); noDocs = true; } // handle suggest NamedList<Object> response = queryResponse.getResponse(); Map suggest = (Map) response.get("suggest"); if (suggest != null) { Set<Map.Entry<String, Object>> suggestEntries = suggest.entrySet(); if (!suggestEntries.isEmpty()) { putSuggestions(suggestEntries, queue, filter, configuration, solrServer); noDocs = true; } } } catch (Exception e) { if (log.isWarnEnabled()) { log.warn("query via {} failed.", solrServer, e); } } return !queue.isEmpty(); } }; }
From source file:org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex.java
License:Apache License
private void putSpellChecks(SpellCheckResponse spellCheckResponse, final Deque<SolrResultRow> queue, Filter filter, OakSolrConfiguration configuration, SolrServer solrServer) throws SolrServerException { List<SpellCheckResponse.Suggestion> suggestions = spellCheckResponse.getSuggestions(); Collection<String> alternatives = new ArrayList<String>(suggestions.size()); for (SpellCheckResponse.Suggestion suggestion : suggestions) { alternatives.addAll(suggestion.getAlternatives()); }/*from ww w. j a v a2s .com*/ // ACL filter spellcheck results for (String alternative : alternatives) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setParam("q", alternative); solrQuery.setParam("df", configuration.getCatchAllField()); solrQuery.setParam("q.op", "AND"); solrQuery.setParam("rows", "100"); QueryResponse suggestQueryResponse = solrServer.query(solrQuery); SolrDocumentList results = suggestQueryResponse.getResults(); if (results != null && results.getNumFound() > 0) { for (SolrDocument doc : results) { if (filter.isAccessible(String.valueOf(doc.getFieldValue(configuration.getPathField())))) { queue.add(new SolrResultRow(alternative)); break; } } } } }
From source file:org.apache.jackrabbit.oak.plugins.index.solr.query.SolrQueryIndex.java
License:Apache License
private void putSuggestions(Set<Map.Entry<String, Object>> suggestEntries, final Deque<SolrResultRow> queue, Filter filter, OakSolrConfiguration configuration, SolrServer solrServer) throws SolrServerException { Collection<SimpleOrderedMap<Object>> retrievedSuggestions = new HashSet<SimpleOrderedMap<Object>>(); for (Map.Entry<String, Object> suggester : suggestEntries) { SimpleOrderedMap<Object> suggestionResponses = ((SimpleOrderedMap) suggester.getValue()); for (Map.Entry<String, Object> suggestionResponse : suggestionResponses) { SimpleOrderedMap<Object> suggestionResults = ((SimpleOrderedMap) suggestionResponse.getValue()); for (Map.Entry<String, Object> suggestionResult : suggestionResults) { if ("suggestions".equals(suggestionResult.getKey())) { ArrayList<SimpleOrderedMap<Object>> suggestions = ((ArrayList<SimpleOrderedMap<Object>>) suggestionResult .getValue()); if (!suggestions.isEmpty()) { for (SimpleOrderedMap<Object> suggestion : suggestions) { retrievedSuggestions.add(suggestion); }/* ww w . ja v a2 s .c o m*/ } } } } } // ACL filter suggestions for (SimpleOrderedMap<Object> suggestion : retrievedSuggestions) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setParam("q", String.valueOf(suggestion.get("term"))); solrQuery.setParam("df", configuration.getCatchAllField()); solrQuery.setParam("q.op", "AND"); solrQuery.setParam("rows", "100"); QueryResponse suggestQueryResponse = solrServer.query(solrQuery); SolrDocumentList results = suggestQueryResponse.getResults(); if (results != null && results.getNumFound() > 0) { for (SolrDocument doc : results) { if (filter.isAccessible(String.valueOf(doc.getFieldValue(configuration.getPathField())))) { queue.add(new SolrResultRow(suggestion.get("term").toString(), Double.parseDouble(suggestion.get("weight").toString()))); break; } } } } }
From source file:org.apache.metron.solr.dao.SolrSearchDao.java
License:Apache License
protected SearchResponse buildSearchResponse(SearchRequest searchRequest, QueryResponse solrResponse) { SearchResponse searchResponse = new SearchResponse(); SolrDocumentList solrDocumentList = solrResponse.getResults(); searchResponse.setTotal(solrDocumentList.getNumFound()); // search hits --> search results List<SearchResult> results = solrDocumentList.stream().map(solrDocument -> SolrUtilities .getSearchResult(solrDocument, searchRequest.getFields(), accessConfig.getIndexSupplier())) .collect(Collectors.toList()); searchResponse.setResults(results);//from w ww . j a v a2 s. c o m // handle facet fields List<String> facetFields = searchRequest.getFacetFields(); if (facetFields != null) { searchResponse.setFacetCounts(getFacetCounts(facetFields, solrResponse)); } if (LOG.isDebugEnabled()) { String response; try { response = JSONUtils.INSTANCE.toJSON(searchResponse, false); } catch (JsonProcessingException e) { response = e.getMessage(); } LOG.debug("Built search response; response={}", response); } return searchResponse; }
From source file:org.apache.nutch.searcher.SolrBean.java
License:Apache License
public Hits search(Query query) throws IOException { // filter query string // final BooleanQuery bQuery = filters.filter(query); // final SolrQuery solrQuery = new SolrQuery(stringify(bQuery)); final SolrQuery solrQuery = new SolrQuery(); solrQuery.set("q", query.getQuery()); String a = query.getParams().getSortField(); solrQuery.setRows(query.getParams().getNumHits()); if (query.getParams().getSortField() == null) { // solrQuery.setFields(query.getParams().getDedupField(), "score", searchUID); query.getParams().setSortField("score"); } else {//w ww. j a va 2s . c om // solrQuery.setFields(query.getParams().getDedupField(), query // .getParams().getSortField(), searchUID); // solrQuery.setSortField(query.getParams().getSortField(), query // .getParams().isReverse() ? ORDER.asc : ORDER.desc); solrQuery.setSort(query.getParams().getSortField(), query.getParams().isReverse() ? ORDER.asc : ORDER.desc); } solrQuery.set("fl", "id,url,title,tstamp,type,content,segment,score"); solrQuery.setHighlight(true); solrQuery.set("hl.fl", "title,content"); solrQuery.set("hl.simple.pre", "<span class=highlight>"); solrQuery.set("hl.simple.post", "</span>"); solrQuery.set("defType", "edismax"); solrQuery.set("qf", "title^4 content"); QueryResponse response; try { response = solr.query(solrQuery); } catch (final SolrServerException e) { throw makeIOException(e); } final SolrDocumentList docList = response.getResults(); Map<String, Map<String, List<String>>> highlights = response.getHighlighting(); int qtime = response.getQTime(); final Hit[] hitArr = new Hit[docList.size()]; for (int i = 0; i < hitArr.length; i++) { final SolrDocument solrDoc = docList.get(i); String url = (String) solrDoc.getFieldValue("url"); String title = (String) solrDoc.getFieldValue("title"); String content = (String) solrDoc.getFieldValue("content"); final Object raw = solrDoc.getFirstValue(query.getParams().getSortField()); WritableComparable sortValue; if (raw instanceof Integer) { sortValue = new IntWritable(((Integer) raw).intValue()); } else if (raw instanceof Float) { sortValue = new FloatWritable(((Float) raw).floatValue()); } else if (raw instanceof String) { sortValue = new Text((String) raw); } else if (raw instanceof Long) { sortValue = new LongWritable(((Long) raw).longValue()); } else { throw new RuntimeException("Unknown sort value type!"); } final String dedupValue = (String) solrDoc.getFirstValue(query.getParams().getDedupField()); final String uniqueKey = (String) solrDoc.getFirstValue(searchUID); // hitArr[i] = new Hit(uniqueKey, sortValue, dedupValue); SolrHit hit = new SolrHit(uniqueKey, sortValue, dedupValue); SolrHitDetails details = buildDetails(solrDoc); details.setHit(hit); hit.setHitDetails(details); hit.setTitleHighlighted(title); int len = (content.length() > 100 ? 100 : content.length()); Summary.Fragment f = new Summary.Fragment(content.substring(0, len)); Summary summary = new Summary(); summary.add(f); hit.setSummary(summary); String titleHighlighted = ""; if (highlights.containsKey(url)) { Map<String, List<String>> snippets = highlights.get(url); if (snippets.containsKey("title")) { titleHighlighted = snippets.get("title").get(0); hit.setTitleHighlighted(titleHighlighted); } if (snippets.containsKey("content")) { f = new Summary.Fragment(snippets.get("content").get(0)); summary = new Summary(); summary.add(f); hit.setSummary(summary); } } hitArr[i] = hit; } return new Hits(docList.getNumFound(), hitArr); }
From source file:org.apache.nutch.searcher.SolrBean.java
License:Apache License
public HitDetails getDetails(Hit hit) throws IOException { // SolrHit h = (SolrHit) hit; // return h.getHitDetails(); QueryResponse response;/* w w w . j ava 2 s . c om*/ try { String url = hit.getUniqueKey(); url.replace(":", "\\:"); SolrQuery solrQuery = new SolrQuery(searchUID + ":\"" + url + "\""); solrQuery.set("fl", "id,url,title,tstamp,type,content,segment,score"); response = solr.query(solrQuery); } catch (final SolrServerException e) { throw makeIOException(e); } final SolrDocumentList docList = response.getResults(); if (docList.getNumFound() == 0) { return null; } return buildDetails(docList.get(0)); }
From source file:org.apache.nutch.searcher.SolrSearchBean.java
License:Apache License
public Hits search(Query query) throws IOException { // filter query string final BooleanQuery bQuery = filters.filter(query); final SolrQuery solrQuery = new SolrQuery(stringify(bQuery)); solrQuery.setRows(query.getParams().getNumHits()); if (query.getParams().getSortField() == null) { solrQuery.setFields(query.getParams().getDedupField(), "score", searchUID); query.getParams().setSortField("score"); } else {/*from ww w .ja va 2 s . c om*/ solrQuery.setFields(query.getParams().getDedupField(), query.getParams().getSortField(), searchUID); solrQuery.setSortField(query.getParams().getSortField(), query.getParams().isReverse() ? ORDER.asc : ORDER.desc); } QueryResponse response; try { response = solr.query(solrQuery); } catch (final SolrServerException e) { throw SolrWriter.makeIOException(e); } final SolrDocumentList docList = response.getResults(); final Hit[] hitArr = new Hit[docList.size()]; for (int i = 0; i < hitArr.length; i++) { final SolrDocument solrDoc = docList.get(i); final Object raw = solrDoc.getFirstValue(query.getParams().getSortField()); WritableComparable sortValue; if (raw instanceof Integer) { sortValue = new IntWritable(((Integer) raw).intValue()); } else if (raw instanceof Float) { sortValue = new FloatWritable(((Float) raw).floatValue()); } else if (raw instanceof String) { sortValue = new Text((String) raw); } else if (raw instanceof Long) { sortValue = new LongWritable(((Long) raw).longValue()); } else { throw new RuntimeException("Unknown sort value type!"); } final String dedupValue = (String) solrDoc.getFirstValue(query.getParams().getDedupField()); final String uniqueKey = (String) solrDoc.getFirstValue(searchUID); hitArr[i] = new Hit(uniqueKey, sortValue, dedupValue); } return new Hits(docList.getNumFound(), hitArr); }
From source file:org.apache.nutch.searcher.SolrSearchBean.java
License:Apache License
public HitDetails getDetails(Hit hit) throws IOException { QueryResponse response;/* w ww . ja v a 2 s. c o m*/ try { response = solr.query(new SolrQuery(searchUID + ":\"" + hit.getUniqueKey() + "\"")); } catch (final SolrServerException e) { throw SolrWriter.makeIOException(e); } final SolrDocumentList docList = response.getResults(); if (docList.getNumFound() == 0) { return null; } return buildDetails(docList.get(0)); }
From source file:org.apache.ranger.solr.SolrAccessAuditsService.java
License:Apache License
public VXAccessAuditList searchXAccessAudits(SearchCriteria searchCriteria) { // Make call to Solr SolrClient solrClient = solrMgr.getSolrClient(); if (solrClient == null) { logger.warn("Solr client is null, so not running the query."); throw restErrorUtil.createRESTException("Error connecting to search engine", MessageEnums.ERROR_SYSTEM); }//from w ww. j av a2 s . com VXAccessAuditList returnList = new VXAccessAuditList(); List<VXAccessAudit> xAccessAuditList = new ArrayList<VXAccessAudit>(); QueryResponse response = solrUtil.searchResources(searchCriteria, searchFields, sortFields, solrClient); if (response == null) { logger.warn("Error running search query. searchCriteria=" + searchCriteria.toString()); throw restErrorUtil.createRESTException("Error running search query", MessageEnums.ERROR_SYSTEM); } SolrDocumentList docs = response.getResults(); int i; for (i = 0; i < docs.size(); i++) { SolrDocument doc = docs.get(i); VXAccessAudit vXAccessAudit = populateViewBean(doc); xAccessAuditList.add(vXAccessAudit); } returnList.setPageSize(searchCriteria.getMaxRows()); returnList.setResultSize(i); returnList.setTotalCount((int) docs.getNumFound()); returnList.setStartIndex((int) docs.getStart()); returnList.setVXAccessAudits(xAccessAuditList); return returnList; }
From source file:org.apache.sentry.tests.e2e.solr.db.integration.TestSolrDocLevelOperations.java
License:Apache License
@Test public void testDocLevelOperations() throws Exception { setupCollectionWithDocSecurity(TEST_COLLECTION_NAME1); createDocument(TEST_COLLECTION_NAME1); CloudSolrServer server = getCloudSolrServer(TEST_COLLECTION_NAME1); try {//from w w w . j a v a2 s . c om // queries SolrQuery query = new SolrQuery(); query.setQuery("*:*"); // as admin setAuthenticationUser(ADMIN_USER); QueryResponse rsp = server.query(query); SolrDocumentList docList = rsp.getResults(); assertEquals(NUM_DOCS, docList.getNumFound()); // as user0 setAuthenticationUser("user0"); grantCollectionPrivilege(TEST_COLLECTION_NAME1, ADMIN_USER, "role0", SearchConstants.QUERY); rsp = server.query(query); docList = rsp.getResults(); assertEquals(NUM_DOCS / 4, rsp.getResults().getNumFound()); //as user1 setAuthenticationUser("user1"); grantCollectionPrivilege(TEST_COLLECTION_NAME1, ADMIN_USER, "role1", SearchConstants.QUERY); rsp = server.query(query); docList = rsp.getResults(); assertEquals(NUM_DOCS / 4, rsp.getResults().getNumFound()); docList = rsp.getResults(); assertEquals(NUM_DOCS / 4, rsp.getResults().getNumFound()); //as user2 setAuthenticationUser("user2"); grantCollectionPrivilege(TEST_COLLECTION_NAME1, ADMIN_USER, "role2", SearchConstants.QUERY); rsp = server.query(query); docList = rsp.getResults(); assertEquals(NUM_DOCS / 4, rsp.getResults().getNumFound()); //as user3 setAuthenticationUser("user3"); grantCollectionPrivilege(TEST_COLLECTION_NAME1, ADMIN_USER, "role3", SearchConstants.QUERY); rsp = server.query(query); docList = rsp.getResults(); assertEquals(NUM_DOCS / 4, rsp.getResults().getNumFound()); } finally { server.shutdown(); } deleteCollection(TEST_COLLECTION_NAME1); }