@Override public Iterable<RawQuery.Result<String>> query(RawQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.queryStringQuery(query.getQuery())); srb.setFrom(query.getOffset()); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getQuery(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<RawQuery.Result<String>> result = new ArrayList<RawQuery.Result<String>>(hits.hits().length); for (SearchHit hit : hits) { result.add(new RawQuery.Result<String>(hit.id(),hit.getScore())); } return result; }
if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields();
@Override public <T> List<String> queryForIds(SearchQuery query) { SearchRequestBuilder request = prepareSearch(query).setQuery(query.getQuery()) .setNoFields(); if(query.getFilter() != null){ request.setFilter(query.getFilter()); } SearchResponse response = request.execute().actionGet(); return extractIds(response); }
protected Void doDeleteByQuery(QueryBuilder queryBuilder) { new ScrollIterable(client, client.prepareSearch(aliasName.getValue()) .setTypes(typeName.getValue()) .setScroll(TIMEOUT) .setNoFields() .setQuery(queryBuilder) .setSize(batchSize)) .stream() .map(searchResponse -> deleteRetrievedIds(client, searchResponse)) .forEach(ListenableActionFuture::actionGet); return null; }
@Override public Iterable<RawQuery.Result<String>> query(RawQuery query, KeyInformation.IndexRetriever informations, TransactionHandle tx) throws StorageException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.queryString(query.getQuery())); srb.setFrom(0); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getQuery(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<RawQuery.Result<String>> result = new ArrayList<RawQuery.Result<String>>(hits.hits().length); for (SearchHit hit : hits) { result.add(new RawQuery.Result<String>(hit.id(),hit.getScore())); } return result; }
@Override public Iterable<RawQuery.Result<String>> query(RawQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.queryString(query.getQuery())); srb.setFrom(query.getOffset()); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getQuery(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<RawQuery.Result<String>> result = new ArrayList<RawQuery.Result<String>>(hits.hits().length); for (SearchHit hit : hits) { result.add(new RawQuery.Result<String>(hit.id(),hit.getScore())); } return result; }
public ListMatrix<ElasticsearchSample> search(String query) { ListMatrix<ElasticsearchSample> list = new DefaultListMatrix<ElasticsearchSample>(); QueryBuilder qb = QueryBuilders.queryString(query).defaultOperator(Operator.AND); SearchResponse response = client.prepareSearch(index).setNoFields().setTypes(type) .setSearchType(SearchType.QUERY_AND_FETCH).setQuery(qb).setFrom(0).setSize(10).setExplain(true) .execute().actionGet(); SearchHit[] results = response.getHits().getHits(); for (SearchHit hit : results) { ElasticsearchSample sample = new ElasticsearchSample(this, hit); list.add(sample); } return list; }
@Override public List<String> query(IndexQuery query, KeyInformation.IndexRetriever informations, BaseTransaction tx) throws BackendException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.matchAllQuery()); srb.setPostFilter(getFilter(query.getCondition(),informations.get(query.getStore()))); if (!query.getOrder().isEmpty()) { List<IndexQuery.OrderEntry> orders = query.getOrder(); for (int i = 0; i < orders.size(); i++) { srb.addSort(new FieldSortBuilder(orders.get(i).getKey()) .order(orders.get(i).getOrder() == Order.ASC ? SortOrder.ASC : SortOrder.DESC) .ignoreUnmapped(true)); } } srb.setFrom(0); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getCondition(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<String> result = new ArrayList<String>(hits.hits().length); for (SearchHit hit : hits) { result.add(hit.id()); } return result; }
@Override public List<String> query(IndexQuery query, KeyInformation.IndexRetriever informations, TransactionHandle tx) throws StorageException { SearchRequestBuilder srb = client.prepareSearch(indexName); srb.setTypes(query.getStore()); srb.setQuery(QueryBuilders.matchAllQuery()); srb.setFilter(getFilter(query.getCondition(),informations.get(query.getStore()))); if (!query.getOrder().isEmpty()) { List<IndexQuery.OrderEntry> orders = query.getOrder(); for (int i = 0; i < orders.size(); i++) { srb.addSort(new FieldSortBuilder(orders.get(i).getKey()) .order(orders.get(i).getOrder() == Order.ASC ? SortOrder.ASC : SortOrder.DESC) .ignoreUnmapped(true)); } } srb.setFrom(0); if (query.hasLimit()) srb.setSize(query.getLimit()); else srb.setSize(maxResultsSize); srb.setNoFields(); //srb.setExplain(true); SearchResponse response = srb.execute().actionGet(); log.debug("Executed query [{}] in {} ms", query.getCondition(), response.getTookInMillis()); SearchHits hits = response.getHits(); if (!query.hasLimit() && hits.totalHits() >= maxResultsSize) log.warn("Query result set truncated to first [{}] elements for query: {}", maxResultsSize, query); List<String> result = new ArrayList<String>(hits.hits().length); for (SearchHit hit : hits) { result.add(hit.id()); } return result; }
@Override public void delete(Class<?> clazz, QueryBuilder query) { String indexName = getIndexForType(clazz); String typeName = MappingBuilder.indexTypeFromClass(clazz); // get all elements and then use a bulk delete to remove data. SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(indexName).setTypes(getTypesFromClass(clazz)).setQuery(query).setNoFields() .setFetchSource(false); searchRequestBuilder.setFrom(0).setSize(1000); SearchResponse response = searchRequestBuilder.execute().actionGet(); while (somethingFound(response)) { BulkRequestBuilder bulkRequestBuilder = getClient().prepareBulk().setRefresh(true); for (int i = 0; i < response.getHits().hits().length; i++) { String id = response.getHits().hits()[i].getId(); bulkRequestBuilder.add(getClient().prepareDelete(indexName, typeName, id)); } bulkRequestBuilder.execute().actionGet(); if (response.getHits().totalHits() == response.getHits().hits().length) { response = null; } else { response = searchRequestBuilder.execute().actionGet(); } } }
@Override public String scan(SearchQuery searchQuery, long scrollTimeInMillis, boolean noFields) { 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"); SearchRequestBuilder requestBuilder = client.prepareSearch(toArray(searchQuery.getIndices())) .setSearchType(SCAN) .setQuery(searchQuery.getQuery()) .setTypes(toArray(searchQuery.getTypes())) .setScroll(TimeValue.timeValueMillis(scrollTimeInMillis)) .setFrom(0) .setSize(searchQuery.getPageable().getPageSize()); if(searchQuery.getFilter() != null){ requestBuilder.setFilter(searchQuery.getFilter()); } if(noFields){ requestBuilder.setNoFields(); } return requestBuilder.execute().actionGet().getScrollId(); }