All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.xpack.core.ml.dataframe.analyses.FieldCardinalityConstraint Maven / Gradle / Ivy

/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0; you may not use this file except in compliance with the Elastic License
 * 2.0.
 */
package org.elasticsearch.xpack.core.ml.dataframe.analyses;

import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;

import java.util.Objects;

/**
 * Allows checking a field's cardinality against given lower and upper bounds
 */
public class FieldCardinalityConstraint {

    private final String field;
    private final long lowerBound;
    private final long upperBound;

    public static FieldCardinalityConstraint between(String field, long lowerBound, long upperBound) {
        return new FieldCardinalityConstraint(field, lowerBound, upperBound);
    }

    private FieldCardinalityConstraint(String field, long lowerBound, long upperBound) {
        this.field = Objects.requireNonNull(field);
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
    }

    public String getField() {
        return field;
    }

    public long getLowerBound() {
        return lowerBound;
    }

    public long getUpperBound() {
        return upperBound;
    }

    public void check(long fieldCardinality) {
        if (fieldCardinality < lowerBound) {
            throw ExceptionsHelper.badRequestException(
                                    "Field [{}] must have at least [{}] distinct values but there were [{}]",
                                    field, lowerBound, fieldCardinality);
        }
        if (fieldCardinality > upperBound) {
            throw ExceptionsHelper.badRequestException(
                "Field [{}] must have at most [{}] distinct values but there were at least [{}]",
                field, upperBound, fieldCardinality);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy