protected SolrQuery buildSearchRequest( SearchRequest searchRequest, String fieldList) throws IOException, SolrServerException { SolrQuery query = new SolrQuery() .setStart(searchRequest.getFrom()) .setRows(searchRequest.getSize()) .setQuery(searchRequest.getQuery()); // handle sort fields for (SortField sortField : searchRequest.getSort()) { query.addSort(sortField.getField(), getSolrSortOrder(sortField.getSortOrder())); } // handle search fields List<String> fields = searchRequest.getFields(); if (fieldList == null) { fieldList = "*"; if (fields != null) { fieldList = StringUtils.join(fields, ","); } } query.set("fl", fieldList); //handle facet fields List<String> facetFields = searchRequest.getFacetFields(); if (facetFields != null) { facetFields.forEach(query::addFacetField); } query.set("collection", getCollections(searchRequest.getIndices())); return query; }
private SearchResponse searchForSortedMetaAlerts(SortField sortBy) throws InvalidSearchException { SearchRequest searchRequest = new SearchRequest(); searchRequest.setFrom(0); searchRequest.setSize(10); searchRequest.setIndices(Arrays.asList(getTestIndexName(), METAALERT_TYPE)); searchRequest.setQuery("*:*"); searchRequest.setSort(Collections.singletonList(sortBy)); return metaDao.search(searchRequest); }
@Override public int hashCode() { int result = indices != null ? indices.hashCode() : 0; result = 31 * result + (query != null ? query.hashCode() : 0); result = 31 * result + getSize(); result = 31 * result + getFrom(); result = 31 * result + (sort != null ? sort.hashCode() : 0); result = 31 * result + (fields != null ? fields.hashCode() : 0); result = 31 * result + (facetFields != null ? facetFields.hashCode() : 0); return result; } }
@Override public SearchResponse search(SearchRequest searchRequest) throws RestException { try { if (searchRequest.getIndices() == null || searchRequest.getIndices().isEmpty()) { List<String> indices = getDefaultIndices(); // metaalerts should be included by default in search requests indices.add(METAALERT_TYPE); searchRequest.setIndices(indices); } if (searchRequest.getFacetFields() != null && searchRequest.getFacetFields().isEmpty()) { searchRequest.setFacetFields(getDefaultFacetFields()); } return dao.search(searchRequest); } catch(InvalidSearchException ise) { throw new RestException(ise.getMessage(), ise); } }
results.add(getSearchResult(hit, searchRequest.getFields())); if (searchRequest.getFacetFields() != null) { List<String> facetFields = searchRequest.getFacetFields(); Map<String, FieldType> commonColumnMetadata; try { commonColumnMetadata = columnMetadataDao.getColumnMetadata(searchRequest.getIndices()); } catch (IOException e) { throw new InvalidSearchException(String.format( "Could not get common column metadata for indices %s", Arrays.toString(searchRequest.getIndices().toArray())));
+ searchRequest.getQuery() + "'})"; "(" + searchRequest.getQuery() + " AND -" + MetaAlertConstants.METAALERT_FIELD + ":[* TO *]" + " AND " + "-" + metaalertTypeClause + ")" + " OR " + parentChildQuery; searchRequest.setQuery(fullQuery); List<String> fields = searchRequest.getFields(); String fieldList = "*"; if (fields != null) {
@Test(expected = InvalidSearchException.class) public void searchShouldThrowExceptionWhenMaxResultsAreExceeded() throws Exception { int maxSearchResults = 20; setup(RestStatus.OK, maxSearchResults); SearchRequest searchRequest = new SearchRequest(); searchRequest.setSize(maxSearchResults + 1); searchRequest.setQuery(""); dao.search(searchRequest); // exception expected - size > max }
public SearchResponse search(SearchRequest searchRequest, String fieldList) throws InvalidSearchException { if (searchRequest.getQuery() == null) { throw new InvalidSearchException("Search query is invalid: null"); } if (client == null) { throw new InvalidSearchException("Uninitialized Dao! You must call init() prior to use."); } if (searchRequest.getSize() > accessConfig.getMaxSearchResults()) { throw new InvalidSearchException( "Search result size must be less than " + accessConfig.getMaxSearchResults()); } try { SolrQuery query = buildSearchRequest(searchRequest, fieldList); QueryResponse response = client.query(query); return buildSearchResponse(searchRequest, response); } catch (SolrException | IOException | SolrServerException e) { String msg = e.getMessage(); LOG.error(msg, e); throw new InvalidSearchException(msg, e); } }
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); // 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; }
/** * Defers to a provided {@link org.elasticsearch.index.query.QueryBuilder} for the query. * @param request The request defining the parameters of the search * @param queryBuilder The actual query to be run. Intended for if the SearchRequest requires wrapping * @return The results of the query * @throws InvalidSearchException When the query is malformed or the current state doesn't allow search */ protected SearchResponse search(SearchRequest request, QueryBuilder queryBuilder) throws InvalidSearchException { org.elasticsearch.action.search.SearchRequest esRequest; org.elasticsearch.action.search.SearchResponse esResponse; if(client == null) { throw new InvalidSearchException("Uninitialized Dao! You must call init() prior to use."); } if (request.getSize() > accessConfig.getMaxSearchResults()) { throw new InvalidSearchException("Search result size must be less than " + accessConfig.getMaxSearchResults()); } esRequest = buildSearchRequest(request, queryBuilder); esResponse = requestSubmitter.submitSearch(esRequest); return buildSearchResponse(request, esResponse); }
@Override public SearchResponse search(SearchRequest searchRequest) throws InvalidSearchException { // Wrap the query to also get any meta-alerts. QueryBuilder qb = constantScoreQuery(boolQuery() .must(boolQuery() .should(new QueryStringQueryBuilder(searchRequest.getQuery())) .should(nestedQuery( MetaAlertConstants.ALERT_FIELD, new QueryStringQueryBuilder(searchRequest.getQuery()), ScoreMode.None ) ) ) // Ensures that it's a meta alert with active status or that it's an alert (signified by // having no status field) .must(boolQuery() .should(termQuery(MetaAlertConstants.STATUS_FIELD, MetaAlertStatus.ACTIVE.getStatusString())) .should(boolQuery().mustNot(existsQuery(MetaAlertConstants.STATUS_FIELD))) ) .mustNot(existsQuery(MetaAlertConstants.METAALERT_FIELD)) ); return elasticsearchDao.search(searchRequest, qb); }
.size(searchRequest.getSize()) .from(searchRequest.getFrom()) .query(queryBuilder) .trackScores(true); List<String> fields = searchRequest.getFields(); meta = columnMetadataDao.getColumnMetadata(searchRequest.getIndices()); } catch(IOException e) { throw new InvalidSearchException("Unable to get column metadata", e); for(SortField sortField : searchRequest.getSort()) { List<String> facetFields = searchRequest.getFacetFields(); String[] indices = wildcardIndices(searchRequest.getIndices()); if (LOG.isDebugEnabled()) { LOG.debug("Built Elasticsearch request; indices={}, request={}", indices, searchBuilder.toString());
SearchRequest searchRequest = new SearchRequest(); searchRequest.setSize(2); searchRequest.setIndices(indices); searchRequest.setFrom(5); searchRequest.setSort(Arrays.asList(expectedSortFields)); searchRequest.setQuery("some query");
@Override public SearchResponse search(SearchRequest searchRequest) throws InvalidSearchException { if(config.getMaxSearchResults() != null && searchRequest.getSize() > config.getMaxSearchResults()) { throw new InvalidSearchException("Search result size must be less than " + config.getMaxSearchResults()); for(String index : searchRequest.getIndices()) { String i = null; for(String storedIdx : BACKING_STORE.keySet()) { if (isMatch(searchRequest.getQuery(), docParsed)) { SearchResult result = new SearchResult(); result.setSource(docParsed); if(searchRequest.getSort().size() != 0) { Collections.sort(response, sorted(searchRequest.getSort())); int maxSize = config.getMaxSearchResults() == null?searchRequest.getSize():config.getMaxSearchResults(); for(int i = searchRequest.getFrom();i < response.size()&& finalResp.size() <= maxSize;++i) { finalResp.add(response.get(i)); ret.setResults(finalResp); Map<String, Map<String, Long>> facetCounts = new HashMap<>(); List<String> facetFields = searchRequest.getFacetFields(); if (facetFields != null) { for (String facet: facetFields) {
sf.setField(getThreatTriageField()); sf.setSortOrder(SortOrder.DESC.getSortOrder()); SearchRequest sr = new SearchRequest(); sr.setQuery("*:*"); sr.setSize(5); sr.setIndices(Arrays.asList(getTestIndexName(), METAALERT_TYPE)); sr.setSort(Collections.singletonList(sf)); sfAsc.setField(getThreatTriageField()); sfAsc.setSortOrder(SortOrder.ASC.getSortOrder()); SearchRequest srAsc = new SearchRequest(); srAsc.setQuery("*:*"); srAsc.setSize(2); srAsc.setIndices(Arrays.asList(getTestIndexName(), METAALERT_TYPE)); srAsc.setSort(Collections.singletonList(sfAsc)); result = metaDao.search(srAsc); results = result.getResults();
SearchRequest searchRequest = new SearchRequest(); searchRequest.setSize(2); searchRequest.setIndices(indices); searchRequest.setFrom(5); searchRequest.setSort(Arrays.asList(expectedSortFields)); searchRequest.setQuery("some query");