@Override public Result<T, K> createSearchResult(SearchImpl<T, K> searchRequest) { String queryString = buildQueryString(searchRequest.query()); SortOptions.Builder sortOptions = buildSortOptions(searchRequest.order()); QueryOptions.Builder queryOptions = QueryOptions.newBuilder(); Integer limit = searchRequest.limit(); int offset = 0; if (limit != null) { offset = searchRequest.offset() == null ? 0 : searchRequest.offset(); int effectiveLimit = limit + offset; if (effectiveLimit > 1000) { Logger.warn( "Currently the Google Search API does not support queries with a limit over 1000. With an offset of %d and a limit of %d, you have an effective limit of %d", offset, limit, effectiveLimit); } limit = effectiveLimit; /* Note, this can't be more than 1000 (Crashes) */ queryOptions = queryOptions.setLimit(limit); } if (searchRequest.accuracy() != null) { queryOptions.setNumberFoundAccuracy(searchRequest.accuracy()); } queryOptions.setSortOptions(sortOptions); Query query = Query.newBuilder().setOptions(queryOptions).build(queryString); Future<Results<ScoredDocument>> searchAsync = getIndex().searchAsync(query); return new ResultImpl<T, K>(this, searchAsync, searchRequest.offset()); }