Почему я не получаю количество объектов, которое меньше размера? - PullRequest
0 голосов
/ 10 октября 2019

Я недавно работаю сasticsearch, и у меня есть вопрос. Я использую прокрутку для получения объектов из упругости более 10_000, максимальный размер, который я могу получить, составляет 100_000. Я выполняю поиск по многоугольнику и не могу получить свой объект, если он не равен 100_000. Например, если у меня есть 7000 объектный код выше, не возвращая их мне.

@Override
    public SearchRequest buildRequest(SearchPolygonParameters args) {
        final SearchRequest searchRequest = new SearchRequest().scroll(TimeValue.timeValueMinutes(elasticScrollProperties.getTime()));
        final SearchSourceBuilder searchSourceBuilder = prepareSearchSourceBuilder(args);
        return searchRequest.source(searchSourceBuilder);
    }

    private SearchSourceBuilder prepareSearchSourceBuilder(SearchPolygonParameters searchPolygonParameters) {
        final SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        final GeoPolygonQueryBuilder geoPolygonQueryBuilder = geoPolygonQuery(GeoLocationModelFieldName.LOCATION.name().toLowerCase(), searchPolygonParameters.getGeoPoints());
        searchSourceBuilder.query(geoPolygonQueryBuilder);
        searchSourceBuilder.size(elasticScrollProperties.getSize());
        return searchSourceBuilder;
    }

После того, как я создаю запрос, я делаю это:

public SearchResponse sendRequestToElastic(SearchPolygonParameters args) throws IOException {
        final SearchRequest searchRequest = searchByPolygonRequestBuilder.buildRequest(args);
        SearchResponse response = elasticDao.search(searchRequest, options);
        response = elasticDao.searchScroll(new SearchScrollRequest(response.getScrollId()).scroll(TimeValue.timeValueMinutes(elasticScrollProperties.getTime())), options);
        return response;
    }

Я хочу получить все объекты, которые меньше или равны максимальному размеру.

Например, этот jsonу меня хорошо работает:

localhost:9200/geo_object/_search?scroll=1m



{
    "size": 10000000,
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_polygon" : {
                    "location" : {
                        "points" : [
                            {"lat" : 50.064135, "lon" : 36.026733},
                            {"lat" : 49.781764, "lon" : 36.152221},
                            {"lat" : 49.848132, "lon" : 36.598222},
                            {"lat" : 50.207628, "lon" : 36.262619}
                        ]
                    }
                }
            }
        }
    }
}

Возвращает мне 7485 документов.

Почему так происходит, что я пропустил? Как я могу это исправить? Может быть, лучше использовать SearchAfter API?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...