@Override public List<String> searchRecentRunningWorkflows(int lastModifiedHoursAgoFrom, int lastModifiedHoursAgoTo) { DateTime dateTime = new DateTime(); QueryBuilder q = QueryBuilders.boolQuery() .must(QueryBuilders.rangeQuery("updateTime") .gt(dateTime.minusHours(lastModifiedHoursAgoFrom))) .must(QueryBuilders.rangeQuery("updateTime") .lt(dateTime.minusHours(lastModifiedHoursAgoTo))) .must(QueryBuilders.termQuery("status", "RUNNING")); SearchRequestBuilder s = elasticSearchClient.prepareSearch(indexName) .setTypes("workflow") .setQuery(q) .setSize(5000) .addSort("updateTime", SortOrder.ASC); SearchResponse response = s.execute().actionGet(); return StreamSupport.stream(response.getHits().spliterator(), false) .map(hit -> hit.getId()) .collect(Collectors.toCollection(LinkedList::new)); }
private SearchResult<String> search(String indexName, String structuredQuery, int start, int size, List<String> sortOptions, String freeTextQuery, String docType) { try { QueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); if (StringUtils.isNotEmpty(structuredQuery)) { Expression expression = Expression.fromString(structuredQuery); queryBuilder = expression.getFilterBuilder(); } BoolQueryBuilder filterQuery = QueryBuilders.boolQuery().must(queryBuilder); QueryStringQueryBuilder stringQuery = QueryBuilders.queryStringQuery(freeTextQuery); BoolQueryBuilder fq = QueryBuilders.boolQuery().must(stringQuery).must(filterQuery); final SearchRequestBuilder srb = elasticSearchClient.prepareSearch(indexName) .setQuery(fq) .setTypes(docType) .storedFields("_id") .setFrom(start) .setSize(size); if (sortOptions != null) { sortOptions.forEach(sortOption -> addSortOptionToSearchRequest(srb, sortOption)); } SearchResponse response = srb.get(); LinkedList<String> result = StreamSupport.stream(response.getHits().spliterator(), false) .map(SearchHit::getId) .collect(Collectors.toCollection(LinkedList::new)); long count = response.getHits().getTotalHits(); return new SearchResult<String>(count, result); } catch (ParserException e) { throw new ApplicationException(Code.BACKEND_ERROR, e.getMessage(), e); } }
@Override public PagedResponse<Component> browseByPage(final CleanupPolicy policy, final Repository repository, final QueryOptions options) { checkNotNull(options.getStart()); checkNotNull(options.getLimit()); StorageTx tx = UnitOfWork.currentTx(); QueryBuilder query = convertPolicyToQuery(policy, options); log.debug("Searching for components to cleanup using policy {}", policy); SearchResponse searchResponse = searchService.searchUnrestrictedInRepos(query, getSort(options.getSortProperty(), options.getSortDirection()), options.getStart(), options.getLimit(), ImmutableList.of(repository.getName())); List<Component> components = stream(searchResponse.getHits().spliterator(), false) .map(searchHit -> tx.findComponent(new DetachedEntityId(searchHit.getId()))) .filter(Objects::nonNull) .collect(toList()); return new PagedResponse<>(searchResponse.getHits().getTotalHits(), components); }
return StreamSupport.stream( response.getHits().spliterator(), false ) .map( hit -> EntityReference.parseEntityReference( hit.getId() ) );