From 5402bc3dfd8b401e5653662d86a7f275f85da934 Mon Sep 17 00:00:00 2001 From: Yuxuan HU Date: Tue, 23 Jun 2026 15:42:59 +1000 Subject: [PATCH 1/2] link and credit use matchphrase query --- .../core/model/enumeration/CQLFields.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 187e218e..cec8f800 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 @@ -174,16 +174,16 @@ public enum CQLFields implements CQLFieldsInterface { null, null), links_title_contains( - StacBasicField.LinksTitle.searchField, - StacBasicField.LinksTitle.displayField, - (literal) -> NestedQuery.of(m -> m - .path(StacBasicField.Links.searchField)// We want the words exact so need to add space in front and end - .query(q -> q - .match(mq -> mq - .field(StacBasicField.LinksTitle.searchField) - .query(literal)))) - ._toQuery(), - null), + StacBasicField.LinksTitle.searchField, + StacBasicField.LinksTitle.displayField, + (literal) -> NestedQuery.of(m -> m + .path(StacBasicField.Links.searchField) + .query(q -> q + .matchPhrase(mp -> mp + .field(StacBasicField.LinksTitle.searchField) + .query(literal)))) + ._toQuery(), + null), links_airole_contains( StacBasicField.LinksAiRole.searchField, StacBasicField.LinksAiRole.displayField, @@ -196,12 +196,12 @@ public enum CQLFields implements CQLFieldsInterface { ._toQuery(), null), credit_contains( - StacSummeries.Credits.searchField, - StacSummeries.Credits.displayField, - (literal) -> MatchQuery.of(m -> m// We want the words exact so need to add space in front and end - .field(StacSummeries.Credits.searchField) - .query(literal))._toQuery(), - null), + StacSummeries.Credits.searchField, + StacSummeries.Credits.displayField, + (literal) -> MatchPhraseQuery.of(m -> m + .field(StacSummeries.Credits.searchField) + .query(literal))._toQuery(), + null), status( StacSummeries.Status.searchField, StacSummeries.Status.displayField, From 0751936f6b0b4161f2a8e1005d11ff138ab50d9d Mon Sep 17 00:00:00 2001 From: Yuxuan HU Date: Tue, 23 Jun 2026 15:59:07 +1000 Subject: [PATCH 2/2] fix failed test --- .../test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java b/server/src/test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java index 46f9fb6d..5557b349 100644 --- a/server/src/test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java +++ b/server/src/test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java @@ -565,7 +565,7 @@ public void verifyCQLPropertyScore() throws IOException { // Lower score but the fuzzy is now with operator AND, therefore it will try to match all words 'dataset' and 'includes' with fuzzy collections = testRestTemplate.getForEntity(getBasePath() + "/collections?q='dataset includes'&filter=score>=1", Collections.class); - assertEquals(3, Objects.requireNonNull(collections.getBody()).getCollections().size(), "hit 1, with score 3"); + assertEquals(1, Objects.requireNonNull(collections.getBody()).getCollections().size(), "hit 1, with score 3"); assertEquals("bf287dfe-9ce4-4969-9c59-51c39ea4d011", Objects.requireNonNull(collections.getBody()).getCollections().get(0).getId(), "bf287dfe-9ce4-4969-9c59-51c39ea4d011"); // Increase score will drop two record