#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF 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.
#

cluster.name=contextElasticSearch
# The elasticSearchAddresses may be a comma seperated list of host names and ports such as
# hostA:9300,hostB:9300
# Note: the port number must be repeated for each host.
elasticSearchAddresses=localhost:9300
index.name=context
monthlyIndex.numberOfShards=3
monthlyIndex.numberOfReplicas=0
numberOfShards=5
numberOfReplicas=0
defaultQueryLimit=10

# The following settings control the behavior of the BulkProcessor API. You can find more information about these
# settings and their behavior here : https://www.elastic.co/guide/en/elasticsearch/client/java-api/2.4/java-docs-bulk-processor.html
# The values used here are the default values of the API
bulkProcessor.concurrentRequests=1
bulkProcessor.bulkActions=1000
bulkProcessor.bulkSize=5MB
bulkProcessor.flushInterval=5s
bulkProcessor.backoffPolicy=exponential

# The following settings are used to perform version checks on the connected ElasticSearch cluster, to make sure that
# appropriate versions are used. The check is performed like this :
# for each node in the ElasticSearch cluster:
#   minimalElasticSearchVersion <= ElasticSearch node version < maximalElasticSearchVersion
minimalElasticSearchVersion=5.0.0
maximalElasticSearchVersion=5.7.0

# The following setting is used to set the aggregate query bucket size
aggregateQueryBucketSize=5000
