@Test(expected = InvalidSearchException.class) public void searchShouldFailWhenNotOK() throws InvalidSearchException, IOException { // mocks SearchResponse response = mock(SearchResponse.class); SearchRequest request = new SearchRequest(); // response will have status of OK when(response.status()).thenReturn(RestStatus.PARTIAL_CONTENT); when(response.getFailedShards()).thenReturn(0); when(response.getTotalShards()).thenReturn(2); // search should succeed ElasticsearchRequestSubmitter submitter = setup(response); submitter.submitSearch(request); }
@Test public void searchShouldSucceedWhenOK() throws InvalidSearchException, IOException { // mocks SearchResponse response = mock(SearchResponse.class); SearchRequest request = new SearchRequest(); // response will indicate 1 search hit SearchHits hits = mock(SearchHits.class); when(hits.getTotalHits()).thenReturn(1L); // response will have status of OK and no failed shards when(response.status()).thenReturn(RestStatus.OK); when(response.getFailedShards()).thenReturn(0); when(response.getTotalShards()).thenReturn(2); when(response.getHits()).thenReturn(hits); // search should succeed ElasticsearchRequestSubmitter submitter = setup(response); SearchResponse actual = submitter.submitSearch(request); assertNotNull(actual); }
@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.startArray(Fields.RESPONSES); for (Item item : items) { builder.startObject(); if (item.isFailure()) { ElasticsearchException.generateFailureXContent(builder, params, item.getFailure(), true); builder.field(Fields.STATUS, ExceptionsHelper.status(item.getFailure()).getStatus()); } else { item.getResponse().innerToXContent(builder, params); builder.field(Fields.STATUS, item.getResponse().status().getStatus()); } builder.endObject(); } builder.endArray(); builder.endObject(); return builder; }
when(response.status()).thenReturn(RestStatus.OK);
when(response.status()).thenReturn(status); when(response.getHits()).thenReturn(searchHits);
@Override public RestStatus status() { return searchResponse.status(); }
@Override @Deprecated public RestStatus status() { return super.status(); }
@Override public RestStatus status() { if (hasResponse()) { return response.status(); } else { return RestStatus.OK; } } }
@Override public RestStatus status() { if (hasResponse()) { return response.status(); } else { return RestStatus.OK; } } }
private List<Integer> searchStories(String keywords) { SearchRequest req = new SearchRequest(DOCUMENT_INDEX).types(DOCUMENT_TYPE); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.termQuery(DOCUMENT_SEARCH_FIELD, keywords)); req.source(builder); try { SearchResponse resp = esClient.search(req); if (resp.status() == RestStatus.OK) { SearchHit[] hits = resp.getHits().getHits(); List<Integer> retVal = new ArrayList<>(); for (SearchHit hit : hits) { retVal.add(Integer.parseInt(hit.getSourceAsMap().get(DOCUMENT_RESULT_FIELD).toString())); } return retVal; } else { return new ArrayList<Integer>(); } } catch (IOException e) { LOGGER.warn("cannot query elasticsearch: ", e); return new ArrayList<Integer>(); } }
@Override public RestResponse buildResponse(SearchResponse response, XContentBuilder builder) throws Exception { builder.startObject(); if (terminateAfter != DEFAULT_TERMINATE_AFTER) { builder.field("terminated_early", response.isTerminatedEarly()); } builder.field("count", response.getHits().totalHits()); buildBroadcastShardsHeader(builder, request, response.getTotalShards(), response.getSuccessfulShards(), response.getFailedShards(), response.getShardFailures()); builder.endObject(); return new BytesRestResponse(response.status(), builder); } });
private void executeProjectSearchQuery(Client client, QueryBuilder query, String type, String routing, List<ElasticHit> elasticHits) { SearchRequestBuilder srb = client.prepareSearch(Settings.META_INDEX); srb = srb.setTypes(type); srb = srb.setQuery(query); srb = srb.addHighlightedField("name"); srb = srb.setRouting(routing); LOG.log(Level.INFO, "Project Elastic query in Shared Dataset [{0}] is: {1} {2}", new String[]{ type, routing, srb.toString()}); ListenableActionFuture<SearchResponse> futureResponse = srb.execute(); SearchResponse response = futureResponse.actionGet(); if (response.status().getStatus() == 200) { if (response.getHits().getHits().length > 0) { SearchHit[] hits = response.getHits().getHits(); for (SearchHit hit : hits) { elasticHits.add(new ElasticHit(hit)); } } } }
private ScrollingSearchResult.ScrollingBatch<FactDocument> fetchNextFactsBatch(String scrollId) { SearchResponse response; try { response = clientFactory.getHighLevelClient().searchScroll(new SearchScrollRequest() .scrollId(scrollId) .scroll(searchScrollExpiration)); } catch (IOException ex) { LOGGER.warning(ex, "Could not perform request to retrieve next batch of search results. Stop scrolling."); return ScrollingSearchResult.emptyBatch(); } if (response.status() != RestStatus.OK) { LOGGER.warning("Could not retrieve next batch of search results (response code %s). Stop scrolling.", response.status()); return ScrollingSearchResult.emptyBatch(); } return createFactsBatch(response); }
@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.startArray(Fields.RESPONSES); for (Item item : items) { builder.startObject(); if (item.isFailure()) { ElasticsearchException.generateFailureXContent(builder, params, item.getFailure(), true); builder.field(Fields.STATUS, ExceptionsHelper.status(item.getFailure()).getStatus()); } else { item.getResponse().innerToXContent(builder, params); builder.field(Fields.STATUS, item.getResponse().status().getStatus()); } builder.endObject(); } builder.endArray(); builder.endObject(); return builder; }
@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.startArray(Fields.RESPONSES); for (Item item : items) { builder.startObject(); if (item.isFailure()) { ElasticsearchException.generateFailureXContent(builder, params, item.getFailure(), true); builder.field(Fields.STATUS, ExceptionsHelper.status(item.getFailure()).getStatus()); } else { item.getResponse().innerToXContent(builder, params); builder.field(Fields.STATUS, item.getResponse().status().getStatus()); } builder.endObject(); } builder.endArray(); builder.endObject(); return builder; }
@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); builder.startArray(Fields.RESPONSES); for (Item item : items) { builder.startObject(); if (item.isFailure()) { ElasticsearchException.generateFailureXContent(builder, params, item.getFailure(), true); builder.field(Fields.STATUS, ExceptionsHelper.status(item.getFailure()).getStatus()); } else { item.getResponse().innerToXContent(builder, params); builder.field(Fields.STATUS, item.getResponse().status().getStatus()); } builder.endObject(); } builder.endArray(); builder.endObject(); return builder; }
/** * Calculate statistics about the Facts bound to Objects. For each Object specified in the statistics criteria it is * calculated how many Facts of each FactType are bound to the Object and when a Fact of that FactType was last added * and last seen. * <p> * Both 'currentUserID' (identifying the calling user) and 'availableOrganizationID' (identifying the Organizations * the calling user has access to) must be set in the statistics criteria in order to apply access control to Facts. * Only statistics for Objects bound to Facts accessible to the calling user will be returned, and only accessible * Facts will be included in the returned statistics. * * @param criteria Criteria to specify for which Objects statistics should be calculated * @return Result container with the calculated statistics for each Object */ public ObjectStatisticsResult calculateObjectStatistics(ObjectStatisticsCriteria criteria) { if (criteria == null) return ObjectStatisticsResult.builder().build(); SearchResponse response; try { response = clientFactory.getHighLevelClient().search(buildObjectStatisticsSearchRequest(criteria)); } catch (IOException ex) { throw logAndExit(ex, "Could not perform request to calculate Object statistics."); } if (response.status() != RestStatus.OK) { LOGGER.warning("Could not calculate Object statistics (response code %s).", response.status()); return ObjectStatisticsResult.builder().build(); } ObjectStatisticsResult result = retrieveObjectStatisticsResult(response); LOGGER.info("Successfully retrieved statistics for %d Objects.", result.getStatisticsCount()); return result; }