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>

Reply via email to