public <T> List<Hit<T, Void>> getHits(Class<T> sourceType, boolean addEsMetadataFields) { return getHits(sourceType, Void.class, addEsMetadataFields); }
@SuppressWarnings("unchecked") public SearchResult search(SearchesConfig config) { final Set<IndexRange> indexRanges = determineAffectedIndicesWithRanges(config.range(), config.filter()); final SearchSourceBuilder requestBuilder = searchRequest(config); if (indexRanges.isEmpty()) { return SearchResult.empty(config.query(), requestBuilder.toString()); } final Set<String> indices = extractIndexNamesFromIndexRanges(indexRanges); final Search.Builder searchBuilder = new Search.Builder(requestBuilder.toString()) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(indices); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(searchBuilder.build(), () -> "Unable to perform search query"); final List<ResultMessage> hits = searchResult.getHits(Map.class, false).stream() .map(hit -> ResultMessage.parseFromSource(hit.id, hit.index, (Map<String, Object>) hit.source, hit.highlight)) .collect(Collectors.toList()); recordEsMetrics(searchResult, config.range()); return new SearchResult(hits, searchResult.getTotal(), indexRanges, config.query(), requestBuilder.toString(), tookMsFromSearchResult(searchResult)); }
@AssistedInject public ScrollResult(JestClient jestClient, ObjectMapper objectMapper, @Assisted SearchResult initialResult, @Assisted("query") String query, @Assisted("scroll") String scroll, @Assisted List<String> fields) { super(query, null, initialResult.getJsonObject().path("took").asLong()); this.jestClient = jestClient; this.objectMapper = objectMapper; this.initialResult = initialResult; this.scroll = scroll; this.fields = fields; totalHits = initialResult.getTotal(); scrollId = getScrollIdFromResult(initialResult); final Md5Hash md5Hash = new Md5Hash(getOriginalQuery()); queryHash = md5Hash.toHex(); LOG.debug("[{}] Starting scroll request for query {}", queryHash, getOriginalQuery()); }
public MultiSearchResponse(JsonObject jsonObject) { final JsonElement error = jsonObject.get(ERROR_KEY); if(error != null) { this.isError = true; this.error = error; if (error.isJsonPrimitive()) { this.errorMessage = error.getAsString(); } else if (error.isJsonObject()){ this.errorMessage = error.getAsJsonObject().get("reason").getAsString(); } else { this.errorMessage = error.toString(); } this.searchResult = null; } else { this.isError = false; this.errorMessage = null; this.error = JsonNull.INSTANCE; this.searchResult = new SearchResult(gson); this.searchResult.setSucceeded(true); this.searchResult.setResponseCode(responseCode); this.searchResult.setJsonObject(jsonObject); this.searchResult.setJsonString(jsonObject.toString()); this.searchResult.setPathToResult("hits/hits/_source"); } } }
@Test public void testCreateIndexDocumentsFunction() { SearchResult jestResult = mock(SearchResult.class); JestResult jestResultAliases = mock(JestResult.class); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("INDEX_NAME_1", "INDEX_NAME"); jsonObject.addProperty("INDEX_NAME_2", "INDEX_NAME"); // Build mocks when(jestClientHelper.execute(any())).thenReturn(jestResult); when(jestResult.isSucceeded()).thenReturn(true); when(jestClientHelper.execute(any())).thenReturn(jestResultAliases); when(jestResultAliases.isSucceeded()).thenReturn(true); when(jestResultAliases.getJsonObject()).thenReturn(jsonObject); Map<String, String> documentMap = new HashMap<>(); documentMap.put("1", "JSON"); indexFunctionsDao.createIndexDocuments("INDEX_NAME", "DOCUMENT_TYPE", documentMap); verify(jestClientHelper, times(3)).execute(any()); verify(jestResultAliases).getJsonObject(); verifyNoMoreInteractions(jestClientHelper); }
@Test public void testValidateFunctionUpdate() { SearchResult jestResult = mock(SearchResult.class); // Build mocks when(jestClientHelper.execute(any())).thenReturn(jestResult); when(jestResult.getSourceAsString()).thenReturn("JSON_UPDATE"); indexFunctionsDao.validateDocumentIndex("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(jestClientHelper, times(2)).execute(any()); verify(jestResult).getSourceAsString(); verify(jestResult).isSucceeded(); verifyNoMoreInteractions(jestClientHelper); }
@Test public void testGetNestedTagTagIndexSearchResponseDtoSearchResultParameter() { SearchResult searchResult = mock(SearchResult.class); MetricAggregation metricAggregation = mock(MetricAggregation.class); SumAggregation tagFacetAggregation = mock(SumAggregation.class); TermsAggregation tagTypeCodesAggregation = mock(TermsAggregation.class); when(searchResult.getAggregations()).thenReturn(metricAggregation); when(metricAggregation.getSumAggregation(TAG_FACET_AGGS)).thenReturn(tagFacetAggregation); when(tagFacetAggregation.getTermsAggregation(TAGTYPE_CODE_AGGREGATION)).thenReturn(tagTypeCodesAggregation); List<TagTypeIndexSearchResponseDto> result = elasticsearchHelper.getNestedTagTagIndexSearchResponseDto(searchResult); assertThat("Result is null.", result, is(notNullValue())); }
@Test public void testIdsInIndexFunction() { JestResult jestResult = mock(JestResult.class); SearchResult searchResult = mock(SearchResult.class); List<String> idList = Arrays.asList("{id:1}"); List<String> emptyList = new ArrayList<>(); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("_scroll_id", "100"); when(jestClientHelper.execute(any(Search.class))).thenReturn(searchResult); when(searchResult.getSourceAsStringList()).thenReturn(idList); when(searchResult.getJsonObject()).thenReturn(jsonObject); when(jestClientHelper.execute(any(SearchScroll.class))).thenReturn(jestResult); when(jestResult.getSourceAsStringList()).thenReturn(emptyList); indexFunctionsDao.getIdsInIndex("INDEX_NAME", "DOCUMENT_TYPE"); verify(jestClientHelper).execute(any(Search.class)); verify(searchResult, times(2)).getSourceAsStringList(); verify(searchResult).getJsonObject(); verify(jestClientHelper).execute(any(SearchScroll.class)); verify(jestResult).getSourceAsStringList(); }
SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); when(highlightField.getName()).thenReturn("displayName"); when(highlightField.getFragments()).thenReturn(value); when(configurationHelper.getProperty(ConfigurationValue.TAG_SHORT_DESCRIPTION_LENGTH, Integer.class)).thenReturn(300); highlightMap.put("field", highlightList); SearchResult.Hit<Map, Void> hit1 = new SearchResult(gson).new Hit(HashMap.class, element, HashMap.class, null, highlightMap, null, setInvalidSearchResultIndexName ? INVALID_VALUE : TAG_SEARCH_INDEX_NAME, TAG_SEARCH_INDEX_NAME, "type", 1.0); SearchResult.Hit<Map, Void> hit2 = new SearchResult(gson).new Hit(HashMap.class, element, HashMap.class, null, highlightMap, null, BUSINESS_OBJECT_DEFINITION_SEARCH_INDEX_NAME, BUSINESS_OBJECT_DEFINITION_SEARCH_INDEX_NAME, "type", 2.0); searchHitList.add(hit1); searchHitList.add(hit2); when(searchResult.getHits(Map.class)).thenReturn(searchHitList); when(searchResult.getTotal()).thenReturn(200L); when(searchResult.getAggregations()).thenReturn(metricAggregation); verify(searchResult).getTotal(); verify(searchResult).getHits(Map.class);
@Test public void testIndexFunction() { SearchResult jestResult = mock(SearchResult.class); // Build mocks when(jestClientHelper.execute(any())).thenReturn(jestResult); // Call the method under test indexFunctionsDao.createIndexDocument("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(jestClientHelper).execute(any()); verify(jestResult).isSucceeded(); verifyNoMoreInteractions(jestClientHelper); }
private void runSearch() { SearchResult searchResult = searcher.runSearch(); JsonArray hits = searchResult.getJsonObject().get( "hits" ).getAsJsonObject().get( "hits" ).getAsJsonArray(); results = new ArrayList<>( searchResult.getTotal() ); for ( JsonElement hit : hits ) { EntityInfo converted = searcher.convertQueryHit( hit.getAsJsonObject() ); if ( converted != null ) { results.add( converted ); } } } }
private void initScroll() throws StorageException { try { Search search = new Search.Builder(query) .addIndex(getIndexName()) .addType(entityType) .setParameter(Parameters.SCROLL, "1m") .addSort(sort) .build(); SearchResult response = esClient.execute(search); if (!response.isSucceeded()) { throw new StorageException("Scrolled query failed " + response.getErrorMessage()); } scrollId = response.getJsonObject().get("_scroll_id").getAsString(); this.hits = (List) response.getHits(Map.class); } catch (IOException e) { throw new StorageException(e); } }
@Override public Explanation explain(int documentId) { if ( searchResult == null ) { execute(); } JsonObject hit = searchResult.getJsonObject() .get( "hits" ) .getAsJsonObject() .get( "hits" ) .getAsJsonArray() // TODO Is it right to use the document id that way? I am not quite clear about its semantics .get( documentId ) .getAsJsonObject(); try ( ServiceReference<JestClient> client = getExtendedSearchIntegrator().getServiceManager().requestReference( JestClient.class ) ) { Explain request = new Explain.Builder( hit.get( "_index" ).getAsString(), hit.get( "_type" ).getAsString(), hit.get( "_id" ).getAsString(), searcher.executedQuery ) .build(); DocumentResult response = client.get().executeRequest( request ); JsonObject explanation = response.getJsonObject().get( "explanation" ).getAsJsonObject(); return convertExplanation( explanation ); } }
searchSourceBuilder.query(queryStringQueryBuilder).from(from(pageNo, size)).size(size); log.debug("搜索DSL:{}", searchSourceBuilder.toString()); Search search = new Search.Builder(searchSourceBuilder.toString()) .addIndex(INDEX) .addType(TYPE) .build(); try { SearchResult result = client.execute(search); List<SearchResult.Hit<Movie, Void>> hits = result.getHits(Movie.class); List<Movie> movies = hits.stream().map(hit -> { Movie movie = hit.source; int took = result.getJsonObject().get("took").getAsInt(); Page<Movie> page = Page.<Movie>builder().list(movies).pageNo(pageNo).size(size).total(result.getTotal()).took(took).build(); return page; } catch (IOException e) {
@Override public Page<Movie> query(QueryDTO queryDTO, int pageNo, int size) { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().from(from(pageNo, size)).size(size); if (queryDTO.getMinScore() != null) { BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder("score").gte(queryDTO.getMinScore()); boolQueryBuilder.must(rangeQueryBuilder); searchSourceBuilder.query(boolQueryBuilder); } if (queryDTO.getOrderBy() != null) { searchSourceBuilder.sort(queryDTO.getOrderBy(), SortOrder.DESC); } log.debug("搜索DSL:{}", searchSourceBuilder.toString()); Search search = new Search.Builder(searchSourceBuilder.toString()) .addIndex(INDEX) .addType(TYPE) .build(); try { SearchResult result = client.execute(search); List<Movie> movies = result.getSourceAsObjectList(Movie.class, false); int took = result.getJsonObject().get("took").getAsInt(); Page<Movie> page = Page.<Movie>builder().list(movies).pageNo(pageNo).size(size).total(result.getTotal()).took(took).build(); return page; } catch (IOException e) { log.error("search异常", e); return null; } }
@Override public <U> AggregatedPage<U> mapResults(SearchResult response, Class<U> clazz, Pageable pageable) { List<String> result = new ArrayList<>(); for (SearchResult.Hit<JsonObject, Void> searchHit : response.getHits(JsonObject.class)) { result.add(searchHit.source.get(JestResult.ES_METADATA_ID).getAsString()); } if (result.size() > 0) { return new AggregatedPageImpl<U>((List<U>) result, ((ExtendedSearchResult)response).getScrollId()); } return new AggregatedPageImpl<U>(Collections.emptyList(), ((ExtendedSearchResult)response).getScrollId()); }
final JestResult result = client.execute(deleteIndex); if (!result.isSucceeded()) { throw new IllegalStateException(result.getErrorMessage()); final Collection<BulkableAction<DocumentResult>> bulkActions = new ArrayList<>(); final Search initialScroll = new Search.Builder("{\"query\":{\"match_all\" : {}}}") .setParameter(Parameters.SCROLL, "1m") .setParameter(Parameters.SIZE, documentCount) .build(); final SearchResult scrollResponse = client.execute(initialScroll); if (!scrollResponse.isSucceeded()) { throw new IllegalStateException(scrollResponse.getErrorMessage()); final String scrollId = scrollResponse.getJsonObject().getAsJsonPrimitive("_scroll_id").getAsString(); while (true) { final SearchScroll searchScroll = new SearchScroll.Builder(scrollId, "1m").build(); final JestResult result = client.execute(searchScroll); if (!result.isSucceeded()) { throw new IllegalStateException(result.getErrorMessage());
private List<AlarmFeedback> execute(Search search) throws IOException, FeedbackException { SearchResult result = client.execute(search); if (result == null) { throw new FeedbackException("Failed to get result"); } List<Hit<FeedbackDocument, Void>> feedback = result.getHits(FeedbackDocument.class); if (feedback == null) { return Collections.emptyList(); } return feedback.stream().map(hit -> hit.source).map(FeedbackDocument::toAlarmFeedback).collect(Collectors.toList()); }
Search search = new Search.Builder(escaped) .addIndex(getIndexName()) .addType("client") .build(); SearchResult response = getClient().execute(search); if (!response.isSucceeded()) { throw new RuntimeException(response.getErrorMessage()); if (response.getTotal() < 1) { throw new IOException(); Hit<Client,Void> hit = response.getFirstHit(Client.class); return hit.source; } catch (IOException e) {
@SuppressWarnings({ "unchecked", "rawtypes" }) private void fetch() throws StorageException { try { Builder builder = new SearchScroll.Builder(scrollId, "1m"); SearchScroll scroll = new SearchScroll(builder) { @Override public JestResult createNewElasticSearchResult(String responseBody, int statusCode, String reasonPhrase, Gson gson) { return createNewElasticSearchResult(new SearchResult(gson), responseBody, statusCode, reasonPhrase, gson); } }; SearchResult response = (SearchResult) esClient.execute(scroll); if (!response.isSucceeded()) { throw new StorageException("Scrolled fetch failed " + response.getErrorMessage()); } this.hits = (List) response.getHits(Map.class); } catch (IOException e) { throw new StorageException(e); } }