diff --git a/Jenkinsfile b/Jenkinsfile index b9c7143647f..9c846ba626e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -293,7 +293,8 @@ stage('Configure') { new LocalOpenSearchBuildEnvironment(version: '2.12.0', condition: TestCondition.ON_DEMAND), new LocalOpenSearchBuildEnvironment(version: '2.13.0', condition: TestCondition.ON_DEMAND), new LocalOpenSearchBuildEnvironment(version: '2.14.0', condition: TestCondition.ON_DEMAND), - new LocalOpenSearchBuildEnvironment(version: '2.15.0', condition: TestCondition.BEFORE_MERGE), + new LocalOpenSearchBuildEnvironment(version: '2.15.0', condition: TestCondition.ON_DEMAND), + new LocalOpenSearchBuildEnvironment(version: '2.16.0', condition: TestCondition.BEFORE_MERGE), // See https://opensearch.org/lines/2x.html for a list of all 2.x versions // IMPORTANT: Make sure to update the documentation for any newly supported OpenSearch versions // See version.org.opensearch.compatible.expected.text diff --git a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactory.java b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactory.java index bcc10039bd9..f9ebd127e7b 100644 --- a/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactory.java +++ b/backend/elasticsearch/src/main/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactory.java @@ -245,7 +245,7 @@ private ElasticsearchProtocolDialect createProtocolDialectOpenSearchV1(Elasticse } private ElasticsearchProtocolDialect createProtocolDialectOpenSearchV2(ElasticsearchVersion version, int minor) { - if ( minor > 15 ) { + if ( minor > 16 ) { log.unknownElasticsearchVersion( version ); } return new Elasticsearch70ProtocolDialect(); diff --git a/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactoryTest.java b/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactoryTest.java index 3f819e77b80..fa35e6b61ee 100644 --- a/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactoryTest.java +++ b/backend/elasticsearch/src/test/java/org/hibernate/search/backend/elasticsearch/dialect/impl/ElasticsearchDialectFactoryTest.java @@ -412,14 +412,22 @@ public static List params() { ElasticsearchDistributionName.OPENSEARCH, "2.15.0", "2.15.0", OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class ), - successWithWarning( + success( ElasticsearchDistributionName.OPENSEARCH, "2.16", "2.16.0", OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class ), - successWithWarning( + success( ElasticsearchDistributionName.OPENSEARCH, "2.16.0", "2.16.0", OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class ), + successWithWarning( + ElasticsearchDistributionName.OPENSEARCH, "2.17", "2.17.0", + OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class + ), + successWithWarning( + ElasticsearchDistributionName.OPENSEARCH, "2.17.0", "2.17.0", + OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class + ), successWithWarning( ElasticsearchDistributionName.OPENSEARCH, "3", "3.0.0", OpenSearch214ModelDialect.class, Elasticsearch70ProtocolDialect.class @@ -511,20 +519,6 @@ private void testUnsupported() { .hasMessageContaining( "'" + distributionName.toString() + ":" + configuredVersionString + "'" ); } - private void testAmbiguous() { - assertThatThrownBy( - () -> { - dialectFactory.createModelDialect( ElasticsearchVersion.of( distributionName, configuredVersionString ) ); - }, - "Test ambiguous version " + configuredVersionString - ) - .isInstanceOf( SearchException.class ) - .hasMessageContaining( "HSEARCH400561" ) - .hasMessageContaining( - "Ambiguous Elasticsearch version: '" + distributionName + ":" + configuredVersionString + "'." ) - .hasMessageContaining( "Please use a more precise version to remove the ambiguity" ); - } - private void testSuccessWithWarning() { ElasticsearchVersion parsedConfiguredVersion = ElasticsearchVersion.of( distributionName, configuredVersionString ); ElasticsearchVersion parsedActualVersion = ElasticsearchVersion.of( distributionName, actualVersionString ); diff --git a/build/container/search-backend/amazon-opensearch-serverless.Dockerfile b/build/container/search-backend/amazon-opensearch-serverless.Dockerfile index 6ad806bf315..7e03d5e20d6 100644 --- a/build/container/search-backend/amazon-opensearch-serverless.Dockerfile +++ b/build/container/search-backend/amazon-opensearch-serverless.Dockerfile @@ -4,4 +4,4 @@ # IMPORTANT! When updating the version of OpenSearch in this Dockerfile, # make sure to update `version.org.opensearch.latest` property in a POM file, # and to update the version in opensearch.Dockerfile as well. -FROM docker.io/opensearchproject/opensearch:2.15.0 \ No newline at end of file +FROM docker.io/opensearchproject/opensearch:2.16.0 \ No newline at end of file diff --git a/build/container/search-backend/opensearch.Dockerfile b/build/container/search-backend/opensearch.Dockerfile index 62395536e8d..13ea1618a48 100644 --- a/build/container/search-backend/opensearch.Dockerfile +++ b/build/container/search-backend/opensearch.Dockerfile @@ -4,4 +4,4 @@ # IMPORTANT! When updating the version of OpenSearch in this Dockerfile, # make sure to update `version.org.opensearch.latest` property in a POM file, # and to update the version in amazon-opensearch-serverless.Dockerfile as well. -FROM docker.io/opensearchproject/opensearch:2.15.0 \ No newline at end of file +FROM docker.io/opensearchproject/opensearch:2.16.0 \ No newline at end of file diff --git a/build/parents/build/pom.xml b/build/parents/build/pom.xml index 9ab6b12a081..3ea987565bb 100644 --- a/build/parents/build/pom.xml +++ b/build/parents/build/pom.xml @@ -69,13 +69,13 @@ --> - 1.3 or 2.15 + 1.3 or 2.16 1.3 or 2.x - 2.15.0 + 2.16.0 ${version.org.opensearch.latest} https://opensearch.org/docs/${parsed-version.org.opensearch.compatible.main.majorVersion}.${parsed-version.org.opensearch.compatible.main.minorVersion} diff --git a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendFeatures.java b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendFeatures.java index f428e2bd8aa..20d82d636f2 100644 --- a/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendFeatures.java +++ b/integrationtest/backend/elasticsearch/src/test/java/org/hibernate/search/integrationtest/backend/elasticsearch/testsupport/util/ElasticsearchTckBackendFeatures.java @@ -477,4 +477,16 @@ public Optional> rawValueEqualsComparator(FieldTypeDe public boolean normalizesStringArgumentToPrefixPredicateForAnalyzedStringField() { return false; } + + @Override + public boolean rangeAggregationsDoNotIgnoreQuery() { + // See https://github.com/opensearch-project/OpenSearch/issues/15169 + // There is a problem with OpenSearch 2.16.0 where query is ignored for a range aggregation, + // leading to routes, being ignored and incorrect counts produced in the results: + return isActualVersion( + es -> true, + os -> os.isLessThan( "2.16.0" ), + aoss -> false + ); + } } diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java index aa48d48e688..9ef7686be69 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/operations/RangeAggregationDescriptor.java @@ -6,6 +6,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.util.ArrayList; import java.util.Arrays; @@ -26,6 +27,7 @@ import org.hibernate.search.integrationtest.backend.tck.testsupport.operations.expectations.UnsupportedSingleFieldAggregationExpectations; import org.hibernate.search.integrationtest.backend.tck.testsupport.types.FieldTypeDescriptor; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.ExpectationsAlternative; +import org.hibernate.search.integrationtest.backend.tck.testsupport.util.TckConfiguration; import org.hibernate.search.integrationtest.backend.tck.testsupport.util.TypeAssertionHelper; import org.hibernate.search.util.common.data.Range; import org.hibernate.search.util.impl.integrationtest.common.NormalizationUtils; @@ -129,6 +131,10 @@ public AggregationScenario onMultiValuedIndex() { private AggregationScenario, Long>> doCreate(Map, Long> expectedResult, TypeAssertionHelper helper) { + assumeTrue( + TckConfiguration.get().getBackendFeatures().rangeAggregationsDoNotIgnoreQuery() + ); + return new AggregationScenario, Long>>() { @Override public AggregationFinalStep, Long>> setup(SearchAggregationFactory factory, diff --git a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendFeatures.java b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendFeatures.java index d47465fccb0..d95ad1ff080 100644 --- a/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendFeatures.java +++ b/integrationtest/backend/tck/src/main/java/org/hibernate/search/integrationtest/backend/tck/testsupport/util/TckBackendFeatures.java @@ -192,4 +192,8 @@ public Optional> rawValueEqualsComparator(FieldTypeDe public boolean normalizesStringArgumentToPrefixPredicateForAnalyzedStringField() { return true; } + + public boolean rangeAggregationsDoNotIgnoreQuery() { + return true; + } } diff --git a/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/LibraryShowcaseSearchIT.java b/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/LibraryShowcaseSearchIT.java index dc4f592932c..73c36f5ad1b 100644 --- a/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/LibraryShowcaseSearchIT.java +++ b/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/LibraryShowcaseSearchIT.java @@ -27,6 +27,8 @@ import static org.hibernate.search.integrationtest.showcase.library.service.TestDataService.SUBURBAN_2_ID; import static org.hibernate.search.integrationtest.showcase.library.service.TestDataService.THESAURUS_OF_LANGUAGES_ID; import static org.hibernate.search.integrationtest.showcase.library.service.TestDataService.UNIVERSITY_ID; +import static org.hibernate.search.util.impl.integrationtest.backend.elasticsearch.dialect.ElasticsearchTestDialect.isActualVersion; +import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.util.Arrays; import java.util.Collections; @@ -462,6 +464,15 @@ void searchAndProjectToMethodLocalClass() { @Test void searchFaceted() { + assumeTrue( + TestActiveProfilesResolver.isLucene() + || isActualVersion( + es -> true, + // See https://github.com/opensearch-project/OpenSearch/issues/15169 + os -> os.isLessThan( "2.16.0" ), + aoss -> false + ) + ); LibraryFacetedSearchResult result = libraryService.searchFaceted( null, null, null, 0, 10 diff --git a/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/TestActiveProfilesResolver.java b/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/TestActiveProfilesResolver.java index a2a70c6e4d8..18b7a5f0aa8 100644 --- a/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/TestActiveProfilesResolver.java +++ b/integrationtest/showcase/library/src/test/java/org/hibernate/search/integrationtest/showcase/library/TestActiveProfilesResolver.java @@ -27,4 +27,8 @@ public String[] resolve(Class testClass) { public static String configuredBackend() { return System.getProperty( "test.backend", DEFAULT_BACKEND ); } + + public static boolean isLucene() { + return DEFAULT_BACKEND.equals( configuredBackend() ); + } }