From 2e72fdcabe54411d29a7d850e65b920f6e85d416 Mon Sep 17 00:00:00 2001 From: Yuxuan HU Date: Mon, 30 Mar 2026 14:16:27 +1100 Subject: [PATCH] upgrade elastic-java to 8.19.10 with relevant code change --- pom.xml | 2 +- .../core/model/enumeration/CQLFields.java | 26 ++++++++++--------- .../server/core/parser/elastic/AfterImpl.java | 8 +++--- .../core/parser/elastic/BeforeImpl.java | 8 +++--- .../core/parser/elastic/DuringImpl.java | 15 ++++++----- .../core/service/ElasticSearchBase.java | 3 +-- .../src/test/resources/application-test.yaml | 2 +- 7 files changed, 33 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index 53390689..3dfc69f9 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ co.elastic.clients elasticsearch-java - 8.13.3 + 8.19.10 org.mapstruct diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CQLFields.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CQLFields.java index 53de0de3..d39c779c 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CQLFields.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CQLFields.java @@ -104,10 +104,10 @@ public enum CQLFields implements CQLFieldsInterface { (order) -> new SortOptions.Builder().script(s -> s .type(ScriptSortType.Number) .nested(NestedSortValue.of(p -> p.path(StacSummeries.Temporal.sortField))) - .script(script -> script.inline(line -> line + .script(script -> script .lang("painless") .source("if (doc['" + StacSummeries.TemporalEnd.searchField + "'].size() == 0) {" + - " return Long.MAX_VALUE; " + + " return Long.MAX_VALUE; " + " } " + " else {" + " return doc['" + StacSummeries.TemporalEnd.searchField + "'].stream()" + @@ -115,7 +115,7 @@ public enum CQLFields implements CQLFieldsInterface { " .max()" + " .getAsLong()" + " }" - )) + ) ).order(order) ) ), @@ -312,22 +312,23 @@ public enum CQLFields implements CQLFieldsInterface { @Override public Query getPropertyEqualToQuery(String literal) { - if(getOverridePropertyEqualsToQuery() == null) { + if (getOverridePropertyEqualsToQuery() == null) { return MatchPhraseQuery.of(builder -> builder .field(this.searchField) .query(literal) )._toQuery(); - } - else { + } else { return getOverridePropertyEqualsToQuery().apply(literal); } } @Override public Query getPropertyGreaterThanOrEqualsToQuery(String literal) { - return RangeQuery.of(builder -> builder - .field(this.searchField) - .gte(JsonData.of(literal)) + return RangeQuery.of(builder -> builder + // set as untyped because the property type is uncertain + .untyped(u -> u + .field(this.searchField) + .gte(JsonData.of(literal))) )._toQuery(); } @@ -354,7 +355,7 @@ public Query getBoundingBoxQuery(TopLeftBottomRightGeoBounds tlbr) { @Override public Query getIsNullQuery() { Query fieldExist = ExistsQuery.of(f -> f - .field(this.searchField))._toQuery(); + .field(this.searchField))._toQuery(); return BoolQuery.of(b -> b .mustNot(fieldExist))._toQuery(); @@ -368,8 +369,10 @@ public Query getLikeQuery(String literal) { .flags("ALL") .value(literal))._toQuery(); } + /** * Given param, find any of those is not a valid CQLCollectionsField + * * @param args - * @return Invalid enum */ @@ -379,8 +382,7 @@ public static List findInvalidEnum(List args) { try { CQLFields.valueOf(str); return false; - } - catch (IllegalArgumentException e) { + } catch (IllegalArgumentException e) { return true; } }) diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/AfterImpl.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/AfterImpl.java index 7ae9a39c..4fc19139 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/AfterImpl.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/AfterImpl.java @@ -3,7 +3,6 @@ import au.org.aodn.ogcapi.server.core.model.enumeration.CQLFields; import au.org.aodn.ogcapi.server.core.model.enumeration.CQLFieldsInterface; import au.org.aodn.ogcapi.server.core.model.enumeration.StacSummeries; -import co.elastic.clients.json.JsonData; import org.geotools.filter.AttributeExpressionImpl; import org.geotools.filter.LiteralExpressionImpl; import org.geotools.filter.text.cql2.CQLException; @@ -42,9 +41,10 @@ public AfterImpl(Expression expression1, Expression expression2, Class enumTy .path(StacSummeries.Temporal.searchField) .query(q1 -> q1 .range(r -> r - .field(StacSummeries.TemporalStart.searchField) - .gte(JsonData.of(dateFormatter.format(literal.getValue()))) - .format("strict_date_optional_time") + .date(d -> d + .field(StacSummeries.TemporalStart.searchField) + .gte(dateFormatter.format(literal.getValue())) + .format("strict_date_optional_time")) ) ) )._toQuery(); diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/BeforeImpl.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/BeforeImpl.java index 7cfef21a..671d9603 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/BeforeImpl.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/BeforeImpl.java @@ -4,7 +4,6 @@ import au.org.aodn.ogcapi.server.core.model.enumeration.CQLFieldsInterface; import au.org.aodn.ogcapi.server.core.model.enumeration.StacSummeries; import co.elastic.clients.elasticsearch._types.query_dsl.NestedQuery; -import co.elastic.clients.json.JsonData; import org.geotools.filter.AttributeExpressionImpl; import org.geotools.filter.LiteralExpressionImpl; import org.geotools.filter.text.cql2.CQLException; @@ -42,9 +41,10 @@ public BeforeImpl(Expression expression1, Expression expression2, Class enumT .path(StacSummeries.Temporal.searchField) .query(q1 -> q1 .range(r -> r - .field(StacSummeries.TemporalEnd.searchField) - .lte(JsonData.of(dateFormatter.format(literal.getValue()))) - .format("strict_date_optional_time") + .date(d -> d + .field(StacSummeries.TemporalEnd.searchField) + .lte(dateFormatter.format(literal.getValue())) + .format("strict_date_optional_time")) ) ) )._toQuery(); diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/DuringImpl.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/DuringImpl.java index 778c8af1..017f785d 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/DuringImpl.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/parser/elastic/DuringImpl.java @@ -7,7 +7,6 @@ import co.elastic.clients.elasticsearch._types.query_dsl.NestedQuery; import co.elastic.clients.elasticsearch._types.query_dsl.Query; import co.elastic.clients.elasticsearch._types.query_dsl.RangeQuery; -import co.elastic.clients.json.JsonData; import org.geotools.filter.AttributeExpressionImpl; import org.geotools.filter.LiteralExpressionImpl; import org.geotools.filter.text.cql2.CQLException; @@ -69,20 +68,22 @@ public DuringImpl(Expression expression1, Expression expression2, Class enumT && cqlFields == CQLFields.temporal) { Query gte = RangeQuery.of(r -> r + .date(d -> d .field(StacSummeries.TemporalStart.searchField) - .gte(JsonData.of(dateFormatter.format(period.getBeginning().getPosition().getDate()))) - .format("strict_date_optional_time"))._toQuery(); + .gte(dateFormatter.format(period.getBeginning().getPosition().getDate())) + .format("strict_date_optional_time")))._toQuery(); Query lte = RangeQuery.of(r -> r + .date(d -> d .field(StacSummeries.TemporalEnd.searchField) - .lte(JsonData.of(dateFormatter.format(period.getEnding().getPosition().getDate()))) - .format("strict_date_optional_time"))._toQuery(); + .lte(dateFormatter.format(period.getEnding().getPosition().getDate())) + .format("strict_date_optional_time")))._toQuery(); this.query = NestedQuery.of(n -> n .path(StacSummeries.Temporal.searchField) - .query(BoolQuery.of(q -> q - .must(gte, lte))._toQuery() + .query(BoolQuery.of(q -> q + .must(gte, lte))._toQuery() ) )._toQuery(); } diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ElasticSearchBase.java b/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ElasticSearchBase.java index 9cbb44de..0d4715bf 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ElasticSearchBase.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/core/service/ElasticSearchBase.java @@ -178,7 +178,7 @@ protected SearchResult searchCollectionBy(final List builder.query(q -> q.scriptScore(ss -> ss // to get the original _score from ELasticsearch .query(bq -> bq.bool(createBoolQueryForProperties(queries, should, filters))) - .script(s -> s.inline(i -> i + .script(s -> s .lang("painless") .source( // Step 1: Retrieve internal quality score from summaries.score field @@ -197,7 +197,6 @@ protected SearchResult searchCollectionBy(final List // Final score = Elasticsearch relevance * normalized quality "return _score * multiplier;" ) - ) )) ); } diff --git a/server/src/test/resources/application-test.yaml b/server/src/test/resources/application-test.yaml index 73070b6f..fd525ac6 100644 --- a/server/src/test/resources/application-test.yaml +++ b/server/src/test/resources/application-test.yaml @@ -1,6 +1,6 @@ ogcapi: docker: - elasticVersion: "8.13.3" + elasticVersion: "8.19.10" elasticsearch: index: