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, 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