Search in sources :

Example 1 with Scroll

use of org.elasticsearch.search.Scroll in project elasticsearch by elastic.

the class RestSearchAction method parseSearchRequest.

/**
     * Parses the rest request on top of the SearchRequest, preserving values that are not overridden by the rest request.
     *
     * @param requestContentParser body of the request to read. This method does not attempt to read the body from the {@code request}
     *        parameter
     */
public static void parseSearchRequest(SearchRequest searchRequest, RestRequest request, XContentParser requestContentParser) throws IOException {
    if (searchRequest.source() == null) {
        searchRequest.source(new SearchSourceBuilder());
    }
    searchRequest.indices(Strings.splitStringByCommaToArray(request.param("index")));
    if (requestContentParser != null) {
        QueryParseContext context = new QueryParseContext(requestContentParser);
        searchRequest.source().parseXContent(context);
    }
    final int batchedReduceSize = request.paramAsInt("batched_reduce_size", searchRequest.getBatchedReduceSize());
    searchRequest.setBatchedReduceSize(batchedReduceSize);
    // do not allow 'query_and_fetch' or 'dfs_query_and_fetch' search types
    // from the REST layer. these modes are an internal optimization and should
    // not be specified explicitly by the user.
    String searchType = request.param("search_type");
    if ("query_and_fetch".equals(searchType) || "dfs_query_and_fetch".equals(searchType)) {
        throw new IllegalArgumentException("Unsupported search type [" + searchType + "]");
    } else {
        searchRequest.searchType(searchType);
    }
    parseSearchSource(searchRequest.source(), request);
    searchRequest.requestCache(request.paramAsBoolean("request_cache", null));
    String scroll = request.param("scroll");
    if (scroll != null) {
        searchRequest.scroll(new Scroll(parseTimeValue(scroll, null, "scroll")));
    }
    searchRequest.types(Strings.splitStringByCommaToArray(request.param("type")));
    searchRequest.routing(request.param("routing"));
    searchRequest.preference(request.param("preference"));
    searchRequest.indicesOptions(IndicesOptions.fromRequest(request, searchRequest.indicesOptions()));
}
Also used : QueryParseContext(org.elasticsearch.index.query.QueryParseContext) Scroll(org.elasticsearch.search.Scroll) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder)

Example 2 with Scroll

use of org.elasticsearch.search.Scroll in project elasticsearch by elastic.

the class RestSearchScrollAction method prepareRequest.

@Override
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
    String scrollId = request.param("scroll_id");
    SearchScrollRequest searchScrollRequest = new SearchScrollRequest();
    searchScrollRequest.scrollId(scrollId);
    String scroll = request.param("scroll");
    if (scroll != null) {
        searchScrollRequest.scroll(new Scroll(parseTimeValue(scroll, null, "scroll")));
    }
    request.withContentOrSourceParamParserOrNull(xContentParser -> {
        if (xContentParser != null) {
            try {
                buildFromContent(xContentParser, searchScrollRequest);
            } catch (IOException e) {
                throw new IllegalArgumentException("Failed to parse request body", e);
            }
        }
    });
    return channel -> client.searchScroll(searchScrollRequest, new RestStatusToXContentListener<>(channel));
}
Also used : BaseRestHandler(org.elasticsearch.rest.BaseRestHandler) GET(org.elasticsearch.rest.RestRequest.Method.GET) RestStatusToXContentListener(org.elasticsearch.rest.action.RestStatusToXContentListener) Scroll(org.elasticsearch.search.Scroll) IOException(java.io.IOException) RestController(org.elasticsearch.rest.RestController) XContentParser(org.elasticsearch.common.xcontent.XContentParser) POST(org.elasticsearch.rest.RestRequest.Method.POST) Settings(org.elasticsearch.common.settings.Settings) TimeValue(org.elasticsearch.common.unit.TimeValue) RestRequest(org.elasticsearch.rest.RestRequest) NodeClient(org.elasticsearch.client.node.NodeClient) TimeValue.parseTimeValue(org.elasticsearch.common.unit.TimeValue.parseTimeValue) SearchScrollRequest(org.elasticsearch.action.search.SearchScrollRequest) Scroll(org.elasticsearch.search.Scroll) IOException(java.io.IOException) SearchScrollRequest(org.elasticsearch.action.search.SearchScrollRequest)

Example 3 with Scroll

use of org.elasticsearch.search.Scroll in project elasticsearch by elastic.

the class SearchSlowLogTests method createSearchContext.

@Override
protected SearchContext createSearchContext(IndexService indexService) {
    BigArrays bigArrays = indexService.getBigArrays();
    ThreadPool threadPool = indexService.getThreadPool();
    return new TestSearchContext(threadPool, bigArrays, indexService) {

        final ShardSearchRequest request = new ShardSearchRequest() {

            private SearchSourceBuilder searchSourceBuilder;

            @Override
            public ShardId shardId() {
                return new ShardId(indexService.index(), 0);
            }

            @Override
            public String[] types() {
                return new String[0];
            }

            @Override
            public SearchSourceBuilder source() {
                return searchSourceBuilder;
            }

            @Override
            public void source(SearchSourceBuilder source) {
                searchSourceBuilder = source;
            }

            @Override
            public int numberOfShards() {
                return 0;
            }

            @Override
            public SearchType searchType() {
                return null;
            }

            @Override
            public QueryBuilder filteringAliases() {
                return null;
            }

            @Override
            public float indexBoost() {
                return 1.0f;
            }

            @Override
            public long nowInMillis() {
                return 0;
            }

            @Override
            public Boolean requestCache() {
                return null;
            }

            @Override
            public Scroll scroll() {
                return null;
            }

            @Override
            public void setProfile(boolean profile) {
            }

            @Override
            public boolean isProfile() {
                return false;
            }

            @Override
            public BytesReference cacheKey() throws IOException {
                return null;
            }

            @Override
            public void rewrite(QueryShardContext context) throws IOException {
            }
        };

        @Override
        public ShardSearchRequest request() {
            return request;
        }
    };
}
Also used : BytesReference(org.elasticsearch.common.bytes.BytesReference) Scroll(org.elasticsearch.search.Scroll) ThreadPool(org.elasticsearch.threadpool.ThreadPool) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) IOException(java.io.IOException) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder) ShardId(org.elasticsearch.index.shard.ShardId) BigArrays(org.elasticsearch.common.util.BigArrays) TestSearchContext(org.elasticsearch.test.TestSearchContext) ShardSearchRequest(org.elasticsearch.search.internal.ShardSearchRequest) QueryShardContext(org.elasticsearch.index.query.QueryShardContext) SearchType(org.elasticsearch.action.search.SearchType)

Example 4 with Scroll

use of org.elasticsearch.search.Scroll in project elasticsearch by elastic.

the class SearchSliceIT method testNumericSort.

public void testNumericSort() throws Exception {
    int numShards = setupIndex(true);
    SearchResponse sr = client().prepareSearch("test").setQuery(matchAllQuery()).setSize(0).get();
    int numDocs = (int) sr.getHits().getTotalHits();
    assertThat(numDocs, equalTo(NUM_DOCS));
    int max = randomIntBetween(2, numShards * 3);
    for (String field : new String[] { "_uid", "random_int", "static_int" }) {
        int fetchSize = randomIntBetween(10, 100);
        SearchRequestBuilder request = client().prepareSearch("test").setQuery(matchAllQuery()).setScroll(new Scroll(TimeValue.timeValueSeconds(10))).addSort(SortBuilders.fieldSort("random_int")).setSize(fetchSize);
        assertSearchSlicesWithScroll(request, field, max);
    }
}
Also used : SearchRequestBuilder(org.elasticsearch.action.search.SearchRequestBuilder) Scroll(org.elasticsearch.search.Scroll) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 5 with Scroll

use of org.elasticsearch.search.Scroll in project elasticsearch by elastic.

the class SearchSliceIT method assertSearchSlicesWithScroll.

private void assertSearchSlicesWithScroll(SearchRequestBuilder request, String field, int numSlice) {
    int totalResults = 0;
    List<String> keys = new ArrayList<>();
    for (int id = 0; id < numSlice; id++) {
        SliceBuilder sliceBuilder = new SliceBuilder(field, id, numSlice);
        SearchResponse searchResponse = request.slice(sliceBuilder).get();
        totalResults += searchResponse.getHits().getHits().length;
        int expectedSliceResults = (int) searchResponse.getHits().getTotalHits();
        int numSliceResults = searchResponse.getHits().getHits().length;
        String scrollId = searchResponse.getScrollId();
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            keys.add(hit.getId());
        }
        while (searchResponse.getHits().getHits().length > 0) {
            searchResponse = client().prepareSearchScroll("test").setScrollId(scrollId).setScroll(new Scroll(TimeValue.timeValueSeconds(10))).get();
            scrollId = searchResponse.getScrollId();
            totalResults += searchResponse.getHits().getHits().length;
            numSliceResults += searchResponse.getHits().getHits().length;
            for (SearchHit hit : searchResponse.getHits().getHits()) {
                keys.add(hit.getId());
            }
        }
        assertThat(numSliceResults, equalTo(expectedSliceResults));
        clearScroll(scrollId);
    }
    assertThat(totalResults, equalTo(NUM_DOCS));
    assertThat(keys.size(), equalTo(NUM_DOCS));
    assertThat(new HashSet(keys).size(), equalTo(NUM_DOCS));
}
Also used : SearchHit(org.elasticsearch.search.SearchHit) Scroll(org.elasticsearch.search.Scroll) ArrayList(java.util.ArrayList) SearchResponse(org.elasticsearch.action.search.SearchResponse) HashSet(java.util.HashSet)

Aggregations

Scroll (org.elasticsearch.search.Scroll)8 SearchResponse (org.elasticsearch.action.search.SearchResponse)3 IOException (java.io.IOException)2 SearchRequestBuilder (org.elasticsearch.action.search.SearchRequestBuilder)2 XContentParser (org.elasticsearch.common.xcontent.XContentParser)2 SearchSourceBuilder (org.elasticsearch.search.builder.SearchSourceBuilder)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 SearchPhaseExecutionException (org.elasticsearch.action.search.SearchPhaseExecutionException)1 SearchScrollRequest (org.elasticsearch.action.search.SearchScrollRequest)1 SearchType (org.elasticsearch.action.search.SearchType)1 NodeClient (org.elasticsearch.client.node.NodeClient)1 BytesReference (org.elasticsearch.common.bytes.BytesReference)1 Settings (org.elasticsearch.common.settings.Settings)1 TimeValue (org.elasticsearch.common.unit.TimeValue)1 TimeValue.parseTimeValue (org.elasticsearch.common.unit.TimeValue.parseTimeValue)1 BigArrays (org.elasticsearch.common.util.BigArrays)1 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)1 QueryParseContext (org.elasticsearch.index.query.QueryParseContext)1 QueryShardContext (org.elasticsearch.index.query.QueryShardContext)1