Too_many_buckets_Exception в elasticsearch ⇐ JAVA
-
Гость
Too_many_buckets_Exception в elasticsearch
Я столкнулся с проблемой агрегации ElasticSearch. Мы используем RestHighLevelClient для запроса ElasticSearch в Java.
Исключение –
ElasticsearchStatusException[исключение Elasticsearch [тип=search_phase_execution_Exception, причина=]]; вложенный: ElasticsearchException [исключение Elasticsearch [type=too_many_buckets_Exception, Reason=Пытаюсь создать слишком много ведра. Должно быть меньше или равно: [20000], но было [20001]. Этот лимит можно установить, изменив уровень кластера [search.max_buckets] настройка.]];
Я изменил search.max_buckets с помощью запроса PUT, но все равно столкнулся с этой проблемой.
PUT /_cluster/settings { "постоянный": { "search.max_buckets":20000 }
В соответствии с нашим требованием сначала мы должны агрегировать данные ежедневно, затем почасово, а затем по правилу. Агрегация будет выглядеть ниже уровня -
День{ 1:00[ { Идентификатор правила: 1, количество: 20 }, { Идентификатор правила: 2, количество: 25 } ], 2:00[ { Идентификатор правила: 1, количество: 20 }, { Идентификатор правила: 2, количество: 25 } ] Теперь мой код —
окончательный список нарушениеCaseMgmtDtos = новый ArrayList(); пытаться { RangeQueryBuilder queryBuilders = (end_timestmp > 0 ? customTimeRangeQueryBuilder (start_timestmp, end_timestmp, GenerationTime) :daysTimeRangeQueryBuilder(14, GenerationTime)); BoolQueryBuilder boolQuery = новый BoolQueryBuilder(); boolQuery.must(queryBuilders); boolQuery.must(QueryBuilders.matchQuery("pvGroupBy", true)); boolQuery.must(QueryBuilders.matchQuery("pvInformation", false)); TopHitsAggregationBuilder topHitsAggregationBuilder = AggregationBuilders.topHits("topHits").docValueField(policyId).sort(generationTime, SortOrder.DESC); TermsAggregationBuilder termAggregation = AggregationBuilders.terms("distinct").field(policyId).size(10000) .subAggregation(topHitsAggregationBuilder); DateHistogramAggregationBuilder timeHistogramAggregationBuilder = AggregationBuilders.dateHistogram("by_hour").field("eventDateTime") .fixedInterval(DateHistogramInterval.HOUR).subAggregation(termsAggregation); DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram("by_day").field("eventDateTime") .fixedInterval(DateHistogramInterval.DAY).subAggregation(timeHistogramAggregationBuilder); SearchRequest searchRequest = новый SearchRequest (violationDataModel); SearchSourceBuilder searchSourceBuilder = новый SearchSourceBuilder(); searchSourceBuilder.aggregation(dateHistogramAggregationBuilder); searchSourceBuilder.query(boolQuery); searchSourceBuilder.from (смещение); searchSourceBuilder.size(10000); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = null; searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ParsedDateHistogram parsedDateHistogram = searchResponse.getAggregations().get("by_day"); parsedDateHistogram.getBuckets().parallelStream().forEach(dayBucket -> { ParsedDateHistogramhourBasedData = dayBucket.getAggregations().get("by_hour"); hourBasedData.getBuckets().parallelStream().forEach(hourBucket -> { // Временная шкала timeLine = новая TimeLine(); Строка dateTime =hourBucket.getKeyAsString(); // длинная датаInLong = DateUtil.getMiliSecondFromStringDate(dateTime); // timeLine.setViolationEventTime(dateTime); ParsedLongTerms DifferentPolicys =hourBucket.getAggregations().get("distinct"); DifferentPolicys.getBuckets().parallelStream().forEach(policyBucket -> { Нарушение DTOCaseManagementDTO = новый DTO(); нарушениеCaseManagementDTO.setDataAggregated(истина); нарушениеCaseManagementDTO.setEventDateTime(dateTime); нарушениеCaseManagementDTO.setRuleId(Long.valueOf(policyBucket.getKey().toString())); ParsedTopHits parsedTopHits = policyBucket.getAggregations().get("topHits"); SearchHit[] searchHits = parsedTopHits.getHits().getHits(); SearchHit searchHit = searchHits[0]; Источник строки = searchHit.getSourceAsString(); ViolationDataModel нарушениеМодель = ноль; пытаться { нарушениеМодель = objectMapper.readValue(источник, ViolationDataModel.class); } catch (Исключение е) { е.printStackTrace(); } нарушениеCaseManagementDTO.setRuleName(violationModel.getRuleName()); нарушениеCaseManagementDTO.setGenerationTime(violationModel.getGenerationTime()); нарушениеCaseManagementDTO.setPriority(violationModel.getPriority()); нарушениеCaseManagementDTO.setStatus(violationModel.getViolationStatus()); нарушениеCaseManagementDTO.setViolationId(violationModel.getId()); нарушениеCaseManagementDTO.setEntity(violationModel.getViolator()); нарушениеCaseManagementDTO.setViolationType(violationModel.getViolationEntityType()); нарушениеCaseManagementDTO.setIndicatorsOfAttack((int) (policyBucket.getDocCount() * нарушениеModel.getNoOfViolatedEvents())); нарушениеCaseMgmtDtos.add(violationCaseManagementDTO); }); // нарушениеCaseMgmtDtos.sort((d1,d2) -> d1.getEventDateTime().compareTo(d2.getEventDateTime())); }); }); List realtimeViolation = findViolationWithoutGrouping(start_timestmp, end_timestmp, offset, size); realtimeViolation.stream().forEach(действие -> нарушениеCaseMgmtDtos.add(действие)); } catch (Исключение е) { е.printStackTrace(); } if (Objects.nonNull(violationCaseMgmtDtos) && нарушениеCaseMgmtDtos.size() > 0) { вернуть нарушениеCaseMgmtDtos.stream() .filter(violationDto -> Objects.nonNull(violationDto)) .sorted((d1,d2) -> d2.getEventDateTime().compareTo(d1.getEventDateTime())) .collect(Коллекторы.toList()); } вернуть нарушениеCaseMgmtDtos; } Помогите мне решить эту проблему.
Я столкнулся с проблемой агрегации ElasticSearch. Мы используем RestHighLevelClient для запроса ElasticSearch в Java.
Исключение –
ElasticsearchStatusException[исключение Elasticsearch [тип=search_phase_execution_Exception, причина=]]; вложенный: ElasticsearchException [исключение Elasticsearch [type=too_many_buckets_Exception, Reason=Пытаюсь создать слишком много ведра. Должно быть меньше или равно: [20000], но было [20001]. Этот лимит можно установить, изменив уровень кластера [search.max_buckets] настройка.]];
Я изменил search.max_buckets с помощью запроса PUT, но все равно столкнулся с этой проблемой.
PUT /_cluster/settings { "постоянный": { "search.max_buckets":20000 }
В соответствии с нашим требованием сначала мы должны агрегировать данные ежедневно, затем почасово, а затем по правилу. Агрегация будет выглядеть ниже уровня -
День{ 1:00[ { Идентификатор правила: 1, количество: 20 }, { Идентификатор правила: 2, количество: 25 } ], 2:00[ { Идентификатор правила: 1, количество: 20 }, { Идентификатор правила: 2, количество: 25 } ] Теперь мой код —
окончательный список нарушениеCaseMgmtDtos = новый ArrayList(); пытаться { RangeQueryBuilder queryBuilders = (end_timestmp > 0 ? customTimeRangeQueryBuilder (start_timestmp, end_timestmp, GenerationTime) :daysTimeRangeQueryBuilder(14, GenerationTime)); BoolQueryBuilder boolQuery = новый BoolQueryBuilder(); boolQuery.must(queryBuilders); boolQuery.must(QueryBuilders.matchQuery("pvGroupBy", true)); boolQuery.must(QueryBuilders.matchQuery("pvInformation", false)); TopHitsAggregationBuilder topHitsAggregationBuilder = AggregationBuilders.topHits("topHits").docValueField(policyId).sort(generationTime, SortOrder.DESC); TermsAggregationBuilder termAggregation = AggregationBuilders.terms("distinct").field(policyId).size(10000) .subAggregation(topHitsAggregationBuilder); DateHistogramAggregationBuilder timeHistogramAggregationBuilder = AggregationBuilders.dateHistogram("by_hour").field("eventDateTime") .fixedInterval(DateHistogramInterval.HOUR).subAggregation(termsAggregation); DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders.dateHistogram("by_day").field("eventDateTime") .fixedInterval(DateHistogramInterval.DAY).subAggregation(timeHistogramAggregationBuilder); SearchRequest searchRequest = новый SearchRequest (violationDataModel); SearchSourceBuilder searchSourceBuilder = новый SearchSourceBuilder(); searchSourceBuilder.aggregation(dateHistogramAggregationBuilder); searchSourceBuilder.query(boolQuery); searchSourceBuilder.from (смещение); searchSourceBuilder.size(10000); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = null; searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); ParsedDateHistogram parsedDateHistogram = searchResponse.getAggregations().get("by_day"); parsedDateHistogram.getBuckets().parallelStream().forEach(dayBucket -> { ParsedDateHistogramhourBasedData = dayBucket.getAggregations().get("by_hour"); hourBasedData.getBuckets().parallelStream().forEach(hourBucket -> { // Временная шкала timeLine = новая TimeLine(); Строка dateTime =hourBucket.getKeyAsString(); // длинная датаInLong = DateUtil.getMiliSecondFromStringDate(dateTime); // timeLine.setViolationEventTime(dateTime); ParsedLongTerms DifferentPolicys =hourBucket.getAggregations().get("distinct"); DifferentPolicys.getBuckets().parallelStream().forEach(policyBucket -> { Нарушение DTOCaseManagementDTO = новый DTO(); нарушениеCaseManagementDTO.setDataAggregated(истина); нарушениеCaseManagementDTO.setEventDateTime(dateTime); нарушениеCaseManagementDTO.setRuleId(Long.valueOf(policyBucket.getKey().toString())); ParsedTopHits parsedTopHits = policyBucket.getAggregations().get("topHits"); SearchHit[] searchHits = parsedTopHits.getHits().getHits(); SearchHit searchHit = searchHits[0]; Источник строки = searchHit.getSourceAsString(); ViolationDataModel нарушениеМодель = ноль; пытаться { нарушениеМодель = objectMapper.readValue(источник, ViolationDataModel.class); } catch (Исключение е) { е.printStackTrace(); } нарушениеCaseManagementDTO.setRuleName(violationModel.getRuleName()); нарушениеCaseManagementDTO.setGenerationTime(violationModel.getGenerationTime()); нарушениеCaseManagementDTO.setPriority(violationModel.getPriority()); нарушениеCaseManagementDTO.setStatus(violationModel.getViolationStatus()); нарушениеCaseManagementDTO.setViolationId(violationModel.getId()); нарушениеCaseManagementDTO.setEntity(violationModel.getViolator()); нарушениеCaseManagementDTO.setViolationType(violationModel.getViolationEntityType()); нарушениеCaseManagementDTO.setIndicatorsOfAttack((int) (policyBucket.getDocCount() * нарушениеModel.getNoOfViolatedEvents())); нарушениеCaseMgmtDtos.add(violationCaseManagementDTO); }); // нарушениеCaseMgmtDtos.sort((d1,d2) -> d1.getEventDateTime().compareTo(d2.getEventDateTime())); }); }); List realtimeViolation = findViolationWithoutGrouping(start_timestmp, end_timestmp, offset, size); realtimeViolation.stream().forEach(действие -> нарушениеCaseMgmtDtos.add(действие)); } catch (Исключение е) { е.printStackTrace(); } if (Objects.nonNull(violationCaseMgmtDtos) && нарушениеCaseMgmtDtos.size() > 0) { вернуть нарушениеCaseMgmtDtos.stream() .filter(violationDto -> Objects.nonNull(violationDto)) .sorted((d1,d2) -> d2.getEventDateTime().compareTo(d1.getEventDateTime())) .collect(Коллекторы.toList()); } вернуть нарушениеCaseMgmtDtos; } Помогите мне решить эту проблему.