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

org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgBuilder Maven / Gradle / Ivy

There is a newer version: 8.15.1
Show newest version
/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.elasticsearch.search.aggregations.pipeline.movavg;

import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.search.aggregations.pipeline.BucketHelpers.GapPolicy;
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilder;
import org.elasticsearch.search.aggregations.pipeline.movavg.models.MovAvgModelBuilder;

import java.io.IOException;
import java.util.Map;

/**
 * A builder to create MovingAvg pipeline aggregations
 */
public class MovAvgBuilder extends PipelineAggregatorBuilder {

    private String format;
    private GapPolicy gapPolicy;
    private MovAvgModelBuilder modelBuilder;
    private Integer window;
    private Integer predict;
    private Boolean minimize;
    private Map settings;

    public MovAvgBuilder(String name) {
        super(name, MovAvgPipelineAggregator.TYPE.name());
    }

    public MovAvgBuilder format(String format) {
        this.format = format;
        return this;
    }

    /**
     * Defines what should be done when a gap in the series is discovered
     *
     * @param gapPolicy A GapPolicy enum defining the selected policy
     * @return Returns the builder to continue chaining
     */
    public MovAvgBuilder gapPolicy(GapPolicy gapPolicy) {
        this.gapPolicy = gapPolicy;
        return this;
    }

    /**
     * Sets a MovAvgModelBuilder for the Moving Average.  The model builder is used to
     * define what type of moving average you want to use on the series
     *
     * @param modelBuilder A MovAvgModelBuilder which has been prepopulated with settings
     * @return Returns the builder to continue chaining
     */
    public MovAvgBuilder modelBuilder(MovAvgModelBuilder modelBuilder) {
        this.modelBuilder = modelBuilder;
        return this;
    }

    /**
     * Sets the window size for the moving average.  This window will "slide" across the
     * series, and the values inside that window will be used to calculate the moving avg value
     *
     * @param window Size of window
     * @return Returns the builder to continue chaining
     */
    public MovAvgBuilder window(int window) {
        this.window = window;
        return this;
    }

    /**
     * Sets the number of predictions that should be returned.  Each prediction will be spaced at
     * the intervals specified in the histogram.  E.g "predict: 2" will return two new buckets at the
     * end of the histogram with the predicted values.
     *
     * @param numPredictions Number of predictions to make
     * @return Returns the builder to continue chaining
     */
    public MovAvgBuilder predict(int numPredictions) {
        this.predict = numPredictions;
        return this;
    }

    /**
     * Determines if the model should be fit to the data using a cost
     * minimizing algorithm.
     *
     * @param minimize If the model should be fit to the underlying data
     * @return Returns the builder to continue chaining
     */
    public MovAvgBuilder minimize(boolean minimize) {
        this.minimize = minimize;
        return this;
    }

    /**
     * The hash of settings that should be provided to the model when it is
     * instantiated
     *
     * @param settings
     * @return
     */
    public MovAvgBuilder settings(Map settings) {
        this.settings = settings;
        return this;
    }


    @Override
    protected XContentBuilder internalXContent(XContentBuilder builder, Params params) throws IOException {
        if (format != null) {
            builder.field(MovAvgParser.FORMAT.getPreferredName(), format);
        }
        if (gapPolicy != null) {
            builder.field(MovAvgParser.GAP_POLICY.getPreferredName(), gapPolicy.getName());
        }
        if (modelBuilder != null) {
            modelBuilder.toXContent(builder, params);
        }
        if (window != null) {
            builder.field(MovAvgParser.WINDOW.getPreferredName(), window);
        }
        if (predict != null) {
            builder.field(MovAvgParser.PREDICT.getPreferredName(), predict);
        }
        if (minimize != null) {
            builder.field(MovAvgParser.MINIMIZE.getPreferredName(), minimize);
        }
        if (settings != null) {
            builder.field(MovAvgParser.SETTINGS.getPreferredName(), settings);
        }
        return builder;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy