@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()); }
final String scrollId = searchResult.getJsonObject().path("_scroll_id").asText(null); if (scrollId == null) { throw new ElasticsearchException("Couldn't find scroll ID in search query response");
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 fillChildren(List<MutableMetrics> childMetrics, SearchResult result) { if (childMetrics.size() > 0) { MutableMetrics child = childMetrics.get(0); child.setCount(TraversalMetrics.ELEMENT_COUNT_ID, result.getTotal()); child.setDuration(Long.parseLong(result.getJsonObject().get("took").toString()), TimeUnit.MILLISECONDS); } }
@Override public List<EntityInfo> queryEntityInfos() { if ( searchResult == null ) { execute(); } List<EntityInfo> results = new ArrayList<>( searchResult.getTotal() ); JsonArray hits = searchResult.getJsonObject().get( "hits" ).getAsJsonObject().get( "hits" ).getAsJsonArray(); for ( JsonElement hit : hits ) { EntityInfo entityInfo = searcher.convertQueryHit( hit.getAsJsonObject() ); if ( entityInfo != null ) { results.add( entityInfo ); } } return results; }
@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()); }
@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 ); } }
@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(); }
@Override protected void extractFacetResults() { SearchResult searchResult = getSearchResult(); JsonElement aggregationsElement = searchResult.getJsonObject().get( "aggregations" ); if ( aggregationsElement == null ) { return; } JsonObject aggregations = aggregationsElement.getAsJsonObject(); Map<String, List<Facet>> results = new HashMap<>(); for ( FacetingRequest facetRequest : getFacetManager().getFacetRequests().values() ) { List<Facet> facets; if ( facetRequest instanceof DiscreteFacetRequest ) { facets = updateStringFacets( aggregations, (DiscreteFacetRequest) facetRequest ); // Discrete facets are sorted by Elasticsearch } else { facets = updateRangeFacets( aggregations, (RangeFacetRequest<?>) facetRequest ); if ( !FacetSortOrder.RANGE_DEFINITION_ORDER.equals( facetRequest.getSort() ) ) { Collections.sort( facets, FacetComparators.get( facetRequest.getSort() ) ); } } results.put( facetRequest.getFacetingName(), facets ); } getFacetManager().setFacetResults( results ); }
final String scrollId = searchResult.getJsonObject().path("_scroll_id").asText(null); if (scrollId == null) { throw new ElasticsearchException("Couldn't find scroll ID in search query response");
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); } }
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); } }
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;
@Override public ESResultSet executeImpl(ESQuery esQuery) throws ESClientException { try { final Search search = new Search.Builder(esQuery.getQuery()) .addIndex(esQuery.getIndex()) .addType(esQuery.getType()) .build(); final SearchResult result = client.execute(search); if (result == null) { throw new NullPointerException("Got null result from client for " + esQuery); } return JestResultSetTransformer.transformFrom( result.getJsonObject(), esQuery.getSchema(), esQuery.getColumns()); } catch (Exception e) { throw new ESClientException("Execution failed, ", e); } }
@Override public ESResultSet executeImpl(ESQuery esQuery) throws ESClientException { try { final Search search = new Search.Builder(esQuery.getQuery()) .addIndex(esQuery.getIndex()) .addType(esQuery.getType()) .build(); final SearchResult result = client.execute(search); if (result == null) { throw new NullPointerException("Got null result from client for " + esQuery); } return JestResultSetTransformer.transformFrom( result.getJsonObject(), esQuery.getSchema(), esQuery.getColumns()); } catch (Exception e) { throw new ESClientException("Execution failed, ", e); } }
final String scrollId = scrollResponse.getJsonObject().getAsJsonPrimitive("_scroll_id").getAsString(); while (true) { final SearchScroll searchScroll = new SearchScroll.Builder(scrollId, "1m").build();
@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; } }