Elasticsearch установить предел и смещение, используя RestHighLevelClient - PullRequest
0 голосов
/ 29 мая 2018

Я ищу в Elasticsearch, используя MultiSearchRequest по части поля:

@Override
public Collection<Map<String, Object>> findContractsByIndexAndWord(String index, String type, String word) throws CommonUserException {
    MultiSearchRequest request = new MultiSearchRequest();
    word = word.toLowerCase();
    request.add(formSearchRequestForMultiSearch(index, type, ID_FIELD, word));
    request.add(formSearchRequestForMultiSearch(index, type, PROVIDER_ID_FIELD, word));

    MultiSearchResponse searchResponse;
    try (RestHighLevelClient client = getClient()) {
        searchResponse = client.multiSearch(request);
        return formContracts(searchResponse);
    } catch (IOException e) {
        throw new CommonUserException(ELASTIC_EXCEPTION, ELASTIC_EXCEPTION);
    }
}

private SearchRequest formSearchRequestForMultiSearch(String index, String type, String field, String word) {
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.wildcardQuery(field, word));
    searchRequest.source(searchSourceBuilder);
    return searchRequest;
}
private Collection<Map<String, Object>> formContracts(MultiSearchResponse response) {
    Collection<Map<String, Object>> contracts = new LinkedList<>();
    for (int i = 0; i < response.getResponses().length; i++) {
        SearchHit[] hits = response.getResponses()[i].getResponse().getHits().getHits();
        for (SearchHit hit : hits) {
            if (!contracts.contains(hit.getSourceAsMap())) {
                contracts.add(hit.getSourceAsMap());
            }
        }
    }
    return contracts;
}

Как добавить к этому запросу предел и смещение результата?

1 Ответ

0 голосов
/ 29 мая 2018

Из документации asticsearch (последняя версия)

Вот несколько примеров некоторых распространенных опций:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();  //1
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy"));   //2
sourceBuilder.from(0);                                            //3
sourceBuilder.size(5);                                            //4
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));       //5
  1. СозданиеSearchSourceBuilder с параметрами по умолчанию.
  2. Установить запрос.Может быть любым типом QueryBuilder
  3. Установите опцию from, которая определяет индекс результата, с которого начинается поиск.По умолчанию 0.
  4. Установите параметр размера, который определяет количество возвращаемых результатов поиска.По умолчанию 10.
  5. Установите необязательный тайм-аут, определяющий, сколько времени может занять поиск.

Размер и От - это то, что обычно называют смещением / пределом.

Если вы интенсивно используете API прокрутки, вы можете захотеть взглянуть на API прокрутки.Обход результатов на основе / limit может быть довольно медленным при определенных обстоятельствах, и API прокрутки - это способ избежать большей части этого (если вы исходите из фона SQL, как я предполагаю из терминологии limit / offset, представьте Scroll API какэквивалент сохранения открытого курсора SQL для продолжения с того места, где вы остановились итерацией).

...