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

org.elasticsearch.search.aggregations.bucket.significant.SignificantTermsBuilder Maven / Gradle / Ivy

There is a newer version: 8.14.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.bucket.significant;

import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristic;
import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristicBuilder;
import org.elasticsearch.search.aggregations.bucket.terms.AbstractTermsParametersParser;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregator;

import java.io.IOException;

/**
 * Creates an aggregation that finds interesting or unusual occurrences of terms in a result set.
 * 

* This feature is marked as experimental, and may be subject to change in the future. If you * use this feature, please let us know your experience with it! */ public class SignificantTermsBuilder extends AggregationBuilder { private TermsAggregator.BucketCountThresholds bucketCountThresholds = new TermsAggregator.BucketCountThresholds(-1, -1, -1, -1); private String field; private String executionHint; private String includePattern; private int includeFlags; private String excludePattern; private int excludeFlags; private String[] includeTerms = null; private String[] excludeTerms = null; private QueryBuilder filterBuilder; private SignificanceHeuristicBuilder significanceHeuristicBuilder; /** * Sole constructor. */ public SignificantTermsBuilder(String name) { super(name, SignificantStringTerms.TYPE.name()); } /** * Set the field to fetch significant terms from. */ public SignificantTermsBuilder field(String field) { this.field = field; return this; } /** * Set the number of significant terms to retrieve. */ public SignificantTermsBuilder size(int requiredSize) { bucketCountThresholds.setRequiredSize(requiredSize); return this; } /** * Expert: Set the number of significant terms to retrieve on each shard. */ public SignificantTermsBuilder shardSize(int shardSize) { bucketCountThresholds.setShardSize(shardSize); return this; } /** * Only return significant terms that belong to at least minDocCount documents. */ public SignificantTermsBuilder minDocCount(int minDocCount) { bucketCountThresholds.setMinDocCount(minDocCount); return this; } /** * Set the background filter to compare to. Defaults to the whole index. */ public SignificantTermsBuilder backgroundFilter(QueryBuilder filter) { this.filterBuilder = filter; return this; } /** * Expert: set the minimum number of documents that a term should match to * be retrieved from a shard. */ public SignificantTermsBuilder shardMinDocCount(int shardMinDocCount) { bucketCountThresholds.setShardMinDocCount(shardMinDocCount); return this; } /** * Expert: give an execution hint to this aggregation. */ public SignificantTermsBuilder executionHint(String executionHint) { this.executionHint = executionHint; return this; } /** * Define a regular expression that will determine what terms should be aggregated. The regular expression is based * on the {@link java.util.regex.Pattern} class. * * @see #include(String, int) */ public SignificantTermsBuilder include(String regex) { return include(regex, 0); } /** * Define a regular expression that will determine what terms should be aggregated. The regular expression is based * on the {@link java.util.regex.Pattern} class. * * @see java.util.regex.Pattern#compile(String, int) */ public SignificantTermsBuilder include(String regex, int flags) { if (includeTerms != null) { throw new IllegalArgumentException("exclude clause must be an array of strings or a regex, not both"); } this.includePattern = regex; this.includeFlags = flags; return this; } /** * Define a set of terms that should be aggregated. */ public SignificantTermsBuilder include(String [] terms) { if (includePattern != null) { throw new IllegalArgumentException("include clause must be an array of exact values or a regex, not both"); } this.includeTerms = terms; return this; } /** * Define a set of terms that should be aggregated. */ public SignificantTermsBuilder include(long [] terms) { if (includePattern != null) { throw new IllegalArgumentException("include clause must be an array of exact values or a regex, not both"); } this.includeTerms = longsArrToStringArr(terms); return this; } private String[] longsArrToStringArr(long[] terms) { String[] termsAsString = new String[terms.length]; for (int i = 0; i < terms.length; i++) { termsAsString[i] = Long.toString(terms[i]); } return termsAsString; } /** * Define a regular expression that will filter out terms that should be excluded from the aggregation. The regular * expression is based on the {@link java.util.regex.Pattern} class. * * @see #exclude(String, int) */ public SignificantTermsBuilder exclude(String regex) { return exclude(regex, 0); } /** * Define a regular expression that will filter out terms that should be excluded from the aggregation. The regular * expression is based on the {@link java.util.regex.Pattern} class. * * @see java.util.regex.Pattern#compile(String, int) */ public SignificantTermsBuilder exclude(String regex, int flags) { if (excludeTerms != null) { throw new IllegalArgumentException("exclude clause must be an array of strings or a regex, not both"); } this.excludePattern = regex; this.excludeFlags = flags; return this; } /** * Define a set of terms that should not be aggregated. */ public SignificantTermsBuilder exclude(String [] terms) { if (excludePattern != null) { throw new IllegalArgumentException("exclude clause must be an array of strings or a regex, not both"); } this.excludeTerms = terms; return this; } /** * Define a set of terms that should not be aggregated. */ public SignificantTermsBuilder exclude(long [] terms) { if (excludePattern != null) { throw new IllegalArgumentException("exclude clause must be an array of longs or a regex, not both"); } this.excludeTerms = longsArrToStringArr(terms); return this; } @Override protected XContentBuilder internalXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); if (field != null) { builder.field("field", field); } bucketCountThresholds.toXContent(builder); if (executionHint != null) { builder.field(AbstractTermsParametersParser.EXECUTION_HINT_FIELD_NAME.getPreferredName(), executionHint); } if (includePattern != null) { if (includeFlags == 0) { builder.field("include", includePattern); } else { builder.startObject("include") .field("pattern", includePattern) .field("flags", includeFlags) .endObject(); } } if (includeTerms != null) { builder.array("include", includeTerms); } if (excludePattern != null) { if (excludeFlags == 0) { builder.field("exclude", excludePattern); } else { builder.startObject("exclude") .field("pattern", excludePattern) .field("flags", excludeFlags) .endObject(); } } if (excludeTerms != null) { builder.array("exclude", excludeTerms); } if (filterBuilder != null) { builder.field(SignificantTermsParametersParser.BACKGROUND_FILTER.getPreferredName()); filterBuilder.toXContent(builder, params); } if (significanceHeuristicBuilder != null) { significanceHeuristicBuilder.toXContent(builder, params); } return builder.endObject(); } /** * Expert: set the {@link SignificanceHeuristic} to use. */ public SignificantTermsBuilder significanceHeuristic(SignificanceHeuristicBuilder significanceHeuristicBuilder) { this.significanceHeuristicBuilder = significanceHeuristicBuilder; return this; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy