This is an automated email from the ASF dual-hosted git repository. shuber pushed a commit to branch unomi-3-dev in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 15a2062b666cdb765dff2a698c3648d4e0af4cba Author: Serge Huber <[email protected]> AuthorDate: Mon Jan 5 17:36:06 2026 +0100 Upgrade OpenSearch to 3.4.0 and fix configuration references Upgrade OpenSearch from version 3.0.0 to 3.4.0 (latest as of January 2026) and update all related configurations, documentation, and code references. Version Updates: - Update opensearch.version and opensearch.rest.client.version to 3.4.0 in pom.xml - Update Docker image versions to 3.4.0 in docker-compose files - Update minimalOpenSearchVersion from 2.0.0/2.1.0 to 3.0.0 to drop support for 2.x versions - Maintain maximalOpenSearchVersion at 4.0.0 (exclusive upper bound) Documentation Updates: - Update OpenSearch documentation links to latest versions - Replace outdated Elasticsearch 5.6 link with Elasticsearch 7.17 and OpenSearch latest - Update docker/README.md with OpenSearch 3.4.0 examples - Update manual documentation examples to use OpenSearch 3.4.0 Code and Configuration Fixes: - Replace incorrect "elastic"/"ES" references with "OpenSearch" in OpenSearch files - Fix typo in aggregation error comment ("Retrun" -> "Return") - Update error messages to use "OS filter" instead of "ES filter" - Update logging comment from "ES logging" to "OpenSearch logging" - Update comment references to point to OpenSearch documentation instead of Elasticsearch --- docker/README.md | 4 ++-- docker/src/main/docker/docker-compose-build-os.yml | 6 +++--- docker/src/main/docker/docker-compose-os.yml | 6 +++--- manual/src/main/asciidoc/queries-and-aggregations.adoc | 6 ++++-- manual/src/main/asciidoc/writing-plugins.adoc | 2 +- .../opensearch/OpenSearchPersistenceServiceImpl.java | 2 +- .../querybuilders/core/PropertyConditionOSQueryBuilder.java | 2 +- .../core/src/main/resources/OSGI-INF/blueprint/blueprint.xml | 2 +- .../resources/org.apache.unomi.persistence.opensearch.cfg | 12 ++++++------ pom.xml | 4 ++-- 10 files changed, 24 insertions(+), 22 deletions(-) diff --git a/docker/README.md b/docker/README.md index ae1e4f93b..b646124c9 100644 --- a/docker/README.md +++ b/docker/README.md @@ -58,13 +58,13 @@ docker run -d --name elasticsearch --net unomi -p 9200:9200 -p 9300:9300 \ For OpenSearch: ```bash -docker pull opensearchproject/opensearch:3.0.0 +docker pull opensearchproject/opensearch:3.4.0 docker network create unomi export OPENSEARCH_ADMIN_PASSWORD=enter_your_custom_admin_password_here docker run -d --name opensearch --net unomi -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD} \ - opensearchproject/opensearch:3.0.0 + opensearchproject/opensearch:3.4.0 ``` For Unomi (with ElasticSearch): diff --git a/docker/src/main/docker/docker-compose-build-os.yml b/docker/src/main/docker/docker-compose-build-os.yml index fb2d27d27..17cff8721 100644 --- a/docker/src/main/docker/docker-compose-build-os.yml +++ b/docker/src/main/docker/docker-compose-build-os.yml @@ -23,7 +23,7 @@ networks: services: opensearch-node1: - image: opensearchproject/opensearch:3.0.0 + image: opensearchproject/opensearch:3.4.0 container_name: opensearch-node1 environment: - cluster.name=opensearch-cluster @@ -51,7 +51,7 @@ services: - opensearch-node1 opensearch-node2: - image: opensearchproject/opensearch:3.0.0 + image: opensearchproject/opensearch:3.4.0 container_name: opensearch-node2 environment: - cluster.name=opensearch-cluster @@ -76,7 +76,7 @@ services: - opensearch-node2 opensearch-dashboards: - image: opensearchproject/opensearch-dashboards:3.0.0 + image: opensearchproject/opensearch-dashboards:3.4.0 container_name: opensearch-dashboards ports: - 5601:5601 diff --git a/docker/src/main/docker/docker-compose-os.yml b/docker/src/main/docker/docker-compose-os.yml index 03abe5263..bafd49026 100644 --- a/docker/src/main/docker/docker-compose-os.yml +++ b/docker/src/main/docker/docker-compose-os.yml @@ -23,7 +23,7 @@ networks: services: opensearch-node1: - image: opensearchproject/opensearch:3.0.0 + image: opensearchproject/opensearch:3.4.0 container_name: opensearch-node1 environment: - cluster.name=opensearch-cluster @@ -51,7 +51,7 @@ services: - opensearch-node1 opensearch-node2: - image: opensearchproject/opensearch:3.0.0 + image: opensearchproject/opensearch:3.4.0 container_name: opensearch-node2 environment: - cluster.name=opensearch-cluster @@ -103,7 +103,7 @@ services: - unomi opensearch-dashboards: - image: opensearchproject/opensearch-dashboards:3.0.0 + image: opensearchproject/opensearch-dashboards:3.4.0 container_name: opensearch-dashboards ports: - 5601:5601 diff --git a/manual/src/main/asciidoc/queries-and-aggregations.adoc b/manual/src/main/asciidoc/queries-and-aggregations.adoc index 3ee6af932..581da18dc 100644 --- a/manual/src/main/asciidoc/queries-and-aggregations.adoc +++ b/manual/src/main/asciidoc/queries-and-aggregations.adoc @@ -132,7 +132,7 @@ Aggregations may be of different types. They are listed here below. Date aggregations make it possible to automatically generate "buckets" by time periods. The format is compatible with both ElasticSearch and OpenSearch. For more information about the format, you can refer to: - ElasticSearch documentation: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-datehistogram-aggregation.html -- OpenSearch documentation: https://opensearch.org/docs/2.11/aggregations/bucket/datehistogram/ +- OpenSearch documentation: https://opensearch.org/docs/latest/aggregations/bucket/datehistogram/ Here's an example of a request to retrieve a histogram of by day of all the session that have been create by newcomers (nbOfVisits=1) @@ -270,7 +270,9 @@ The resulting JSON response will look something like this: } ---- -You can find more information about the date range formats here: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-aggregations-bucket-daterange-aggregation.html +You can find more information about the date range formats here: +- ElasticSearch documentation: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-daterange-aggregation.html +- OpenSearch documentation: https://opensearch.org/docs/latest/aggregations/bucket/daterange/ ===== Numeric range diff --git a/manual/src/main/asciidoc/writing-plugins.adoc b/manual/src/main/asciidoc/writing-plugins.adoc index 466c088e7..2e0722401 100644 --- a/manual/src/main/asciidoc/writing-plugins.adoc +++ b/manual/src/main/asciidoc/writing-plugins.adoc @@ -993,7 +993,7 @@ my-custom-plugin/ elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:9.15.0 opensearch: - image: opensearchproject/opensearch:3.0.0 + image: opensearchproject/opensearch:3.4.0 ``` - Test with both search engines to ensure compatibility diff --git a/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/OpenSearchPersistenceServiceImpl.java b/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/OpenSearchPersistenceServiceImpl.java index aad20613e..739794c30 100644 --- a/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/OpenSearchPersistenceServiceImpl.java +++ b/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/OpenSearchPersistenceServiceImpl.java @@ -140,7 +140,7 @@ public class OpenSearchPersistenceServiceImpl implements PersistenceService, Syn private String rolloverIndexMappingTotalFieldsLimit; private String rolloverIndexMaxDocValueFieldsSearch; - private String minimalOpenSearchVersion = "2.1.0"; + private String minimalOpenSearchVersion = "3.0.0"; private String maximalOpenSearchVersion = "4.0.0"; // authentication props diff --git a/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/querybuilders/core/PropertyConditionOSQueryBuilder.java b/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/querybuilders/core/PropertyConditionOSQueryBuilder.java index bb49c226c..de7547b88 100644 --- a/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/querybuilders/core/PropertyConditionOSQueryBuilder.java +++ b/persistence-opensearch/core/src/main/java/org/apache/unomi/persistence/opensearch/querybuilders/core/PropertyConditionOSQueryBuilder.java @@ -242,7 +242,7 @@ public class PropertyConditionOSQueryBuilder implements ConditionOSQueryBuilder } else if (fieldValue instanceof OffsetDateTime) { return fieldValueBuilder.stringValue(convertDateToISO((OffsetDateTime) fieldValue).toString()); } else { - throw new IllegalArgumentException("Impossible to build ES filter, unsupported value type: " + fieldValue.getClass().getName()); + throw new IllegalArgumentException("Impossible to build OS filter, unsupported value type: " + fieldValue.getClass().getName()); } } diff --git a/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml index d09dc7f04..dd08748a7 100644 --- a/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/persistence-opensearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -49,7 +49,7 @@ <cm:property name="rollover.indexMappingTotalFieldsLimit" value="1000"/> <cm:property name="rollover.indexMaxDocValueFieldsSearch" value="1000"/> - <cm:property name="minimalOpenSearchVersion" value="2.1.0" /> + <cm:property name="minimalOpenSearchVersion" value="3.0.0" /> <cm:property name="maximalOpenSearchVersion" value="4.0.0" /> <cm:property name="aggregateQueryBucketSize" value="5000" /> diff --git a/persistence-opensearch/core/src/main/resources/org.apache.unomi.persistence.opensearch.cfg b/persistence-opensearch/core/src/main/resources/org.apache.unomi.persistence.opensearch.cfg index d61a61872..4fb927e5c 100644 --- a/persistence-opensearch/core/src/main/resources/org.apache.unomi.persistence.opensearch.cfg +++ b/persistence-opensearch/core/src/main/resources/org.apache.unomi.persistence.opensearch.cfg @@ -37,13 +37,13 @@ indexMaxDocValueFieldsSearch=${org.apache.unomi.opensearch.defaultIndex.indexMax defaultQueryLimit=${org.apache.unomi.opensearch.defaultQueryLimit:-10} # Rollover amd index configuration for event and session indices, values are cumulative -# See https://www.elastic.co/guide/en/opensearch/reference/7.17/ilm-rollover.html for option details. +# See https://opensearch.org/docs/latest/im-plugin/ism/policies/#rollover for option details. rollover.maxSize=${org.apache.unomi.opensearch.rollover.maxSize:-30gb} rollover.maxAge=${org.apache.unomi.opensearch.rollover.maxAge} rollover.maxDocs=${org.apache.unomi.opensearch.rollover.maxDocs} # 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/opensearch/client/java-api/2.4/java-docs-bulk-processor.html +# settings and their behavior here : https://opensearch.org/docs/latest/api-reference/document-apis/bulk/ # The values used here are the default values of the API bulkProcessor.concurrentRequests=${org.apache.unomi.opensearch.bulkProcessor.concurrentRequests:-1} bulkProcessor.bulkActions=${org.apache.unomi.opensearch.bulkProcessor.bulkActions:-1000} @@ -55,13 +55,13 @@ bulkProcessor.backoffPolicy=${org.apache.unomi.opensearch.bulkProcessor.backoffP # appropriate versions are used. The check is performed like this : # for each node in the OpenSearch cluster: # minimalOpenSearchVersion <= OpenSearch node version < maximalOpenSearchVersion -minimalOpenSearchVersion=2.0.0 +minimalOpenSearchVersion=3.0.0 maximalOpenSearchVersion=4.0.0 # The following setting is used to set the aggregate query bucket size aggregateQueryBucketSize=${org.apache.unomi.opensearch.aggregateQueryBucketSize:-5000} -# Maximum size allowed for an elastic "ids" query +# Maximum size allowed for an OpenSearch "ids" query maximumIdsQueryCount=${org.apache.unomi.opensearch.maximumIdsQueryCount:-5000} # Disable partitions on aggregation queries for past events. @@ -89,7 +89,7 @@ taskWaitingPollingInterval=${org.apache.unomi.opensearch.taskWaitingPollingInter # Example: "{"event":"WaitFor","rule":"False"} itemTypeToRefreshPolicy=${org.apache.unomi.opensearch.itemTypeToRefreshPolicy:-} -# Retrun error in docs are missing in es aggregation calculation +# Return error if docs are missing in OpenSearch aggregation calculation aggQueryThrowOnMissingDocs=${org.apache.unomi.opensearch.aggQueryThrowOnMissingDocs:-false} aggQueryMaxResponseSizeHttp=${org.apache.unomi.opensearch.aggQueryMaxResponseSizeHttp:-} @@ -106,7 +106,7 @@ throwExceptions=${org.apache.unomi.opensearch.throwExceptions:-false} alwaysOverwrite=${org.apache.unomi.opensearch.alwaysOverwrite:-true} useBatchingForUpdate=${org.apache.unomi.opensearch.useBatchingForUpdate:-true} -# ES logging +# OpenSearch logging logLevelRestClient=${org.apache.unomi.opensearch.logLevelRestClient:-ERROR} minimalClusterState=${org.apache.unomi.opensearch.minimalClusterState:-GREEN} diff --git a/pom.xml b/pom.xml index f4501ef6e..acc35166e 100644 --- a/pom.xml +++ b/pom.xml @@ -66,8 +66,8 @@ <karaf.version>4.4.8</karaf.version> <elasticsearch.version>9.1.3</elasticsearch.version> <elasticsearch.test.version>9.1.3</elasticsearch.test.version> - <opensearch.version>3.0.0</opensearch.version> - <opensearch.rest.client.version>3.0.0</opensearch.rest.client.version> + <opensearch.version>3.4.0</opensearch.version> + <opensearch.rest.client.version>3.4.0</opensearch.rest.client.version> <httpclient5.version>5.2.1</httpclient5.version> <aws.sdk.version>2.28.14</aws.sdk.version> <javax-validation.version>1.1.0.Final</javax-validation.version>
