Refine search
private long totalCount(final String[] indexNames) { // Return 0 if there are no indices in the given index set. If we run the query with an empty index list, // Elasticsearch will count all documents in all indices and thus return a wrong count. if (indexNames.length == 0) { return 0L; } final List<String> indices = Arrays.asList(indexNames); final String query = new SearchSourceBuilder() .query(QueryBuilders.matchAllQuery()) .size(0) .toString(); final Search request = new Search.Builder(query) .addIndex(indices) .build(); final MultiSearch multiSearch = new MultiSearch.Builder(request).build(); final MultiSearchResult searchResult = JestUtils.execute(jestClient, multiSearch, () -> "Fetching message count failed for indices " + indices); final List<MultiSearchResult.MultiSearchResponse> responses = searchResult.getResponses(); long total = 0L; for (MultiSearchResult.MultiSearchResponse response : responses) { if (response.isError) { throw JestUtils.specificException(() -> "Fetching message count failed for indices " + indices, response.error); } total += response.searchResult.getTotal(); } return total; } }
public void move(String source, String target) { final String query = SearchSourceBuilder.searchSource() .query(QueryBuilders.matchAllQuery()) .size(350) .sort(SortBuilders.fieldSort(FieldSortBuilder.DOC_FIELD_NAME)) .toString(); final Search request = new Search.Builder(query) .setParameter(Parameters.SCROLL, "10s") .addIndex(source) .build(); 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");
.aggregation(histogramBuilder); return TermsHistogramResult.empty(query, searchSourceBuilder.toString(), size, interval); final Search.Builder searchBuilder = new Search.Builder(searchSourceBuilder.toString()) .ignoreUnavailable(true) .allowNoIndices(true) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(affectedIndices); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(searchBuilder.build(), () -> "Unable to perform terms query"); final DateHistogramAggregation dateHistogramAggregation = searchResult.getAggregations().getDateHistogramAggregation(AGG_HISTOGRAM);
@Override public Page<Movie> query(String queryString, int pageNo, int size) { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false).tagsSchema("default"); searchSourceBuilder.highlighter(highlightBuilder); QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder(queryString); queryStringQueryBuilder .field("actor", 3) .field("description"); 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; } }
@SuppressWarnings("rawtypes") public String getPropertyTechIdByName(String name) { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("name", name)); Search search = new Search.Builder(searchSourceBuilder.toString()) // .addIndex(connection.getIndexName()) // .addType(ElasticConstants.TYPE_PROPERTY) // .build(); List<Hit<Map, Void>> items = connection.search(search).getHits(Map.class); if (null != items && !items.isEmpty()) { return connection.search(search).getHits(Map.class).get(0).source.get(JestResult.ES_METADATA_ID).toString(); } return null; }
/** * 在ES中搜索内容 */ @Override public List<Entity> searchEntity(String searchContent){ SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //searchSourceBuilder.query(QueryBuilders.queryStringQuery(searchContent)); //searchSourceBuilder.field("name"); searchSourceBuilder.query(QueryBuilders.matchQuery("name",searchContent)); Search search = new Search.Builder(searchSourceBuilder.toString()) .addIndex(Entity.INDEX_NAME).addType(Entity.TYPE).build(); try { JestResult result = jestClient.execute(search); return result.getSourceAsObjectList(Entity.class); } catch (IOException e) { LOGGER.error(e.getMessage()); e.printStackTrace(); } return null; } }
int pagesize = (pageable == null) ? 1000 : pageable.getPageSize(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchPhraseQuery("group.id", context)); Search search = new Search.Builder(searchSourceBuilder.toString()) .addIndex(tenantId) .setParameter("from", offset) .setParameter(Parameters.SIZE, pagesize) .build(); log.info(result.getJsonString()); JsonNode resultsNode = objectMapper.readTree(result.getJsonString()); if (resultsNode != null) { JsonNode hitsNode = resultsNode.get("hits");
final SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.fetchSource(searchSources, null); searchSourceBuilder.query(functionScoreQueryBuilder); final Search.Builder searchBuilder = new Search.Builder(searchRequestBuilder.toString()).addIndices(Arrays.asList(bdefActiveIndex, tagActiveIndex)); final SearchResult searchResult = jestClientHelper.execute(searchBuilder.build()); final List<IndexSearchResult> indexSearchResults = buildIndexSearchResults(fields, tagActiveIndex, bdefActiveIndex, searchResult, indexSearchRequest.isEnableHitHighlighting()); return new IndexSearchResponse(searchResult.getTotal(), indexSearchResults, facets);
public Search queryReadAllProperties(Integer totalCount) { return new Search.Builder(new SearchSourceBuilder().size(totalCount).toString()).addIndex(connection.getIndexName()) .addType(ElasticConstants.TYPE_FEATURE).build(); }
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); final Search.Builder searchBuilder = new Search.Builder(searchRequestBuilder.toString()).addIndex(indexName); searchBuilder.setParameter(Parameters.SIZE, ELASTIC_SEARCH_SCROLL_PAGE_SIZE); searchBuilder.setParameter(Parameters.SCROLL, new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME).toString()); JestResult jestResult = jestClientHelper.execute(searchBuilder.build());
.subAggregation(AggregationBuilders.max("ts_max").field(Message.FIELD_TIMESTAMP)) .subAggregation(AggregationBuilders.terms("streams").field(Message.FIELD_STREAMS)); final String query = searchSource() .aggregation(builder) .size(0) .toString(); final Search request = new Search.Builder(query) .addIndex(index) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .ignoreUnavailable(true) .build(); final FilterAggregation f = result.getAggregations().getFilterAggregation("agg"); if (f == null) { throw new IndexNotFoundException("Couldn't build index range of index " + index + " because it doesn't exist.");
public Search queryReadAllProperties() { return new Search.Builder(new SearchSourceBuilder().toString()).addIndex(connection.getIndexName()) .addType(ElasticConstants.TYPE_PROPERTY).build(); }
private SearchResult doScroll(SearchSourceBuilder searchSourceBuilder, SearchQuery searchQuery, long scrollTimeInMillis) { Assert.notNull(searchQuery.getIndices(), "No index defined for Query"); Assert.notNull(searchQuery.getTypes(), "No type define for Query"); Assert.notNull(searchQuery.getPageable(), "Query.pageable is required for scan & scroll"); QueryBuilder elasticsearchQuery = searchQuery.getQuery(); searchSourceBuilder.query(elasticsearchQuery != null ? elasticsearchQuery : QueryBuilders.matchAllQuery()); if (searchQuery.getFilter() != null) { searchSourceBuilder.postFilter(searchQuery.getFilter()); } Search.Builder search = new Search.Builder(searchSourceBuilder.toString()). addTypes(searchQuery.getTypes()). addIndices(searchQuery.getIndices()). setParameter(Parameters.SIZE, searchQuery.getPageable().getPageSize()). setParameter(Parameters.SCROLL, scrollTimeInMillis + "ms"); return new ExtendedSearchResult(execute(search.build())); }
searchSourceBuilder.aggregation(AggregationBuilders.count(AGG_VALUE_COUNT).field(field)); searchSourceBuilder.aggregation(AggregationBuilders.extendedStats(AGG_EXTENDED_STATS).field(field)); searchSourceBuilder.aggregation(AggregationBuilders.cardinality(AGG_CARDINALITY).field(field)); final Search searchRequest = new Search.Builder(searchSourceBuilder.toString()) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(indices) .build(); final io.searchbox.core.SearchResult searchResponse = wrapInMultiSearch(searchRequest, () -> "Unable to retrieve fields stats"); final List<ResultMessage> hits = searchResponse.getHits(Map.class, false).stream() .map(hit -> ResultMessage.parseFromSource(hit.id, hit.index, (Map<String, Object>) hit.source)) .collect(Collectors.toList()); final ExtendedStatsAggregation extendedStatsAggregation = searchResponse.getAggregations().getExtendedStatsAggregation(AGG_EXTENDED_STATS); final ValueCountAggregation valueCountAggregation = searchResponse.getAggregations().getValueCountAggregation(AGG_VALUE_COUNT); final CardinalityAggregation cardinalityAggregation = searchResponse.getAggregations().getCardinalityAggregation(AGG_CARDINALITY);
public TermsResult terms(String field, List<String> stackedFields, int size, String query, String filter, TimeRange range, Sorting.Direction sorting) { final Terms.Order termsOrder = sorting == Sorting.Direction.DESC ? Terms.Order.count(false) : Terms.Order.count(true); final SearchSourceBuilder searchSourceBuilder = filteredSearchRequest(query, filter, range); searchSourceBuilder.aggregation(createTermsBuilder(field, stackedFields, size, termsOrder)); searchSourceBuilder.aggregation(AggregationBuilders.missing("missing") .field(field)); final Set<String> affectedIndices = determineAffectedIndices(range, filter); if (affectedIndices.isEmpty()) { return TermsResult.empty(query, searchSourceBuilder.toString()); } final Search.Builder searchBuilder = new Search.Builder(searchSourceBuilder.toString()) .ignoreUnavailable(true) .allowNoIndices(true) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(affectedIndices); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(searchBuilder.build(), () -> "Unable to perform terms query"); recordEsMetrics(searchResult, range); final TermsAggregation termsAggregation = searchResult.getAggregations().getFilterAggregation(AGG_FILTER).getTermsAggregation(AGG_TERMS); final MissingAggregation missing = searchResult.getAggregations().getMissingAggregation("missing"); return new TermsResult( termsAggregation, missing.getMissing(), searchResult.getTotal(), query, searchSourceBuilder.toString(), tookMsFromSearchResult(searchResult), // Concat field and stacked fields into one fields list ImmutableList.<String>builder().add(field).addAll(stackedFields).build() ); }
@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)); }
public CountResult count(String query, TimeRange range, String filter) { final Set<String> affectedIndices = determineAffectedIndices(range, filter); if (affectedIndices.isEmpty()) { return CountResult.empty(); } final String searchSource = standardSearchRequest(query, 0, -1, range, filter, null, false).toString(); final Search search = new Search.Builder(searchSource).addIndex(affectedIndices).build(); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(search, () -> "Unable to perform count query"); recordEsMetrics(searchResult, range); return CountResult.create(searchResult.getTotal(), 0); }
public ScrollResult scroll(String query, TimeRange range, int limit, int offset, List<String> fields, String filter) { final Set<String> affectedIndices = determineAffectedIndices(range, filter); final Set<String> indexWildcards = indexSetRegistry.getForIndices(affectedIndices).stream() .map(IndexSet::getIndexWildcard) .collect(Collectors.toSet()); final String searchQuery; final Sorting sorting = new Sorting("_doc", Sorting.Direction.ASC); if (filter == null) { searchQuery = standardSearchRequest(query, limit, offset, range, sorting).toString(); } else { searchQuery = filteredSearchRequest(query, filter, limit, offset, range, sorting).toString(); } final Search.Builder initialSearchBuilder = new Search.Builder(searchQuery) .addType(IndexMapping.TYPE_MESSAGE) .setParameter(Parameters.SCROLL, "1m") .addIndex(indexWildcards); fields.forEach(initialSearchBuilder::addSourceIncludePattern); final io.searchbox.core.SearchResult initialResult = checkForFailedShards(JestUtils.execute(jestClient, initialSearchBuilder.build(), () -> "Unable to perform scroll search")); recordEsMetrics(initialResult, range); return scrollResultFactory.create(initialResult, query, fields); }
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); } }