Skip to content

Commit 9bc37c5

Browse files
Merge pull request #254 from aodn/feature/7979-add-ai-param-vocabs
Feature/7979 add ai param vocabs
2 parents ce4d101 + 7932929 commit 9bc37c5

9 files changed

Lines changed: 88 additions & 6 deletions

File tree

server/src/main/java/au/org/aodn/ogcapi/server/core/mapper/Converter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,10 @@ default <D extends StacCollectionModel> Collection getCollection(D m, Filter fil
231231
if (m.getSummaries().getParameterVocabs() != null && !m.getSummaries().getParameterVocabs().isEmpty()) {
232232
collection.getProperties().put(CollectionProperty.parameterVocabs, m.getSummaries().getParameterVocabs());
233233
}
234+
235+
if (m.getSummaries().getAiParameterVocabs() != null && !m.getSummaries().getAiParameterVocabs().isEmpty()) {
236+
collection.getProperties().put(CollectionProperty.aiParameterVocabs, m.getSummaries().getAiParameterVocabs());
237+
}
234238
}
235239

236240
return collection;

server/src/main/java/au/org/aodn/ogcapi/server/core/model/ConceptModel.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package au.org.aodn.ogcapi.server.core.model;
22

3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
35
import lombok.AllArgsConstructor;
46
import lombok.Builder;
57
import lombok.Data;
@@ -14,4 +16,8 @@ public class ConceptModel {
1416
protected String url;
1517
protected String description;
1618
protected String title;
19+
20+
@JsonInclude(JsonInclude.Include.NON_NULL)
21+
@JsonProperty("ai:description")
22+
protected String aiDescription;
1723
}

server/src/main/java/au/org/aodn/ogcapi/server/core/model/SummariesModel.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ public class SummariesModel {
5151

5252
@JsonProperty("parameter_vocabs")
5353
protected List<String> parameterVocabs;
54+
55+
@JsonProperty("ai:parameter_vocabs")
56+
protected List<String> aiParameterVocabs;
5457
}

server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CQLFields.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,18 @@ public enum CQLFields implements CQLFieldsInterface {
149149
null,
150150
null
151151
),
152+
ai_parameter_vocabs(
153+
StacSummeries.AiParameterVocabs.searchField,
154+
StacSummeries.AiParameterVocabs.displayField,
155+
null,
156+
null
157+
),
158+
ai_platform_vocabs(
159+
StacSummeries.AiPlatformVocabs.searchField,
160+
StacSummeries.AiPlatformVocabs.displayField,
161+
null,
162+
null
163+
),
152164
organisation_vocabs(
153165
StacBasicField.OrganisationVocabs.searchField,
154166
StacBasicField.OrganisationVocabs.displayField,

server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/CollectionProperty.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public enum CollectionProperty {
2525
aiDescription("ai:description"),
2626
aiUpdateFrequency("ai:update_frequency"),
2727
scope("scope"),
28-
parameterVocabs("parameter_vocabs");
28+
parameterVocabs("parameter_vocabs"),
29+
aiParameterVocabs("ai:parameter_vocabs");
2930

3031
private final String value;
3132

server/src/main/java/au/org/aodn/ogcapi/server/core/model/enumeration/StacSummeries.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ public enum StacSummeries {
1616
Status("summaries.status", "summaries.status"),
1717
Statement("summaries.statement", "summaries.statement"),
1818
Credits("summaries.credits", "summaries.credits"),
19-
Scope("summaries.scope", "summaries.scope")
19+
Scope("summaries.scope", "summaries.scope"),
20+
AiParameterVocabs("summaries.ai:parameter_vocabs", "summaries.ai:parameter_vocabs"),
21+
AiPlatformVocabs("summaries.ai:platform_vocabs", "summaries.ai:platform_vocabs")
2022
;
2123

2224
public final String sortField;

server/src/test/java/au/org/aodn/ogcapi/server/common/RestApiTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,7 @@ public void verifyAssetSummarySearchWorks() throws IOException {
712712
assertEquals("35234913-aa3c-48ec-b9a4-77f822f66ef8", Objects.requireNonNull(collections.getBody()).getCollections().get(0).getId(), "asset.summary exist 35234913-aa3c-48ec-b9a4-77f822f66ef8");
713713
}
714714

715+
@Test
715716
public void verifyAiUpdateFrequencyWorks() throws IOException {
716717
super.insertJsonToElasticRecordIndex("caf7220a-19e0-4a7f-9af6-eade6c79a47a.json"); // this record is assumed to have a delayed mode with AI enhanced ai:update_frequency field
717718
ResponseEntity<Collections> collections = testRestTemplate.exchange(
@@ -721,6 +722,7 @@ public void verifyAiUpdateFrequencyWorks() throws IOException {
721722
new ParameterizedTypeReference<>() {});
722723

723724
assertEquals(1, Objects.requireNonNull(collections.getBody()).getCollections().size(), "hit 1");
725+
assertEquals("caf7220a-19e0-4a7f-9af6-eade6c79a47a", Objects.requireNonNull(collections.getBody()).getCollections().get(0).getId(), "ai:update_frequency exist caf7220a-19e0-4a7f-9af6-eade6c79a47a");
724726

725727
collections = testRestTemplate.exchange(
726728
getBasePath() + "/collections?filter=(ai_update_frequency='real-time')",
@@ -730,6 +732,26 @@ public void verifyAiUpdateFrequencyWorks() throws IOException {
730732

731733

732734
assertEquals(0, Objects.requireNonNull(collections.getBody()).getCollections().size(), "no real-time records found");
733-
assertEquals("caf7220a-19e0-4a7f-9af6-eade6c79a47a", Objects.requireNonNull(collections.getBody()).getCollections().get(0).getId(), "ai:update_frequency exist caf7220a-19e0-4a7f-9af6-eade6c79a47a");
735+
}
736+
737+
@Test
738+
public void verifyAiParameterVocabsWorks() throws IOException {
739+
super.insertJsonToElasticRecordIndex("e26d0a56-5603-4413-911d-7b359a533a75.json"); // this record is assumed to have predicted keyword with AI enhanced ai:parameter_vocabs field
740+
ResponseEntity<Collections> collections = testRestTemplate.exchange(
741+
getBasePath() + "/collections?filter=(parameter_vocabs='ocean biota' OR ai_parameter_vocabs='ocean biota')",
742+
HttpMethod.GET,
743+
null,
744+
new ParameterizedTypeReference<>() {});
745+
746+
assertEquals(1, Objects.requireNonNull(collections.getBody()).getCollections().size(), "hit 1");
747+
748+
collections = testRestTemplate.exchange(
749+
getBasePath() + "/collections?filter=(platform_vocabs='glider' OR ai_platform_vocabs='glider')",
750+
HttpMethod.GET,
751+
null,
752+
new ParameterizedTypeReference<>() {});
753+
754+
755+
assertEquals(0, Objects.requireNonNull(collections.getBody()).getCollections().size(), "no records found for glider platform");
734756
}
735757
}

server/src/test/resources/databag/e26d0a56-5603-4413-911d-7b359a533a75.json

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
"revision": "2019-10-14T00:00:00",
5555
"dataset_group": ["aims"],
5656
"update_frequency": "completed",
57+
"ai:update_frequency": "completed",
58+
"ai:parameter_vocabs": [
59+
"ocean biota"
60+
],
61+
"ai:platform_vocabs": [],
5762
"proj:geometry": {
5863
"geometries": [
5964
{
@@ -152,8 +157,10 @@
152157
"end": "1986-02-28T12:59:59Z"
153158
}
154159
],
155-
"parameter_vocabs": [],
156-
"platform_vocabs": [],
160+
"parameter_vocabs_sayt": [
161+
"ocean biota"
162+
],
163+
"platform_vocabs_sayt": [],
157164
"organisation_vocabs": [
158165
"Australian Institute of Marine Science (AIMS)"
159166
]
@@ -442,7 +449,18 @@
442449
]
443450
}
444451
],
445-
"themes": [],
452+
"themes": [{
453+
"concepts": [
454+
{
455+
"id": "Abundance of biota",
456+
"url": "http://vocab.aodn.org.au/def/discovery_parameter/entity/488",
457+
"title": "AODN Discovery Parameter Vocabulary",
458+
"description": "",
459+
"ai:description": "This is the prediction provided by AI model."
460+
}
461+
],
462+
"scheme": "theme"
463+
}],
446464
"id": "e26d0a56-5603-4413-911d-7b359a533a75",
447465
"search_suggestions": {
448466
"abstract_phrases": [

server/src/test/resources/portal_records_index_schema.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"et_al_stop",
2626
"english_stop",
2727
"length_filter",
28+
"token_limit",
2829
"shingle_filter",
2930
"unique"
3031
]
@@ -56,6 +57,10 @@
5657
"pattern": "\\b\\d+\\b",
5758
"replacement": ""
5859
},
60+
"token_limit" : {
61+
"type": "limit",
62+
"max_token_count": 350
63+
},
5964
"length_filter": {
6065
"type": "length",
6166
"min": 2
@@ -195,6 +200,15 @@
195200
"type": "keyword",
196201
"index": false
197202
},
203+
"ai:update_frequency": {
204+
"type": "keyword"
205+
},
206+
"ai:parameter_vocabs": {
207+
"type": "keyword"
208+
},
209+
"ai:platform_vocabs": {
210+
"type": "keyword"
211+
},
198212
"score": {
199213
"type": "long"
200214
},

0 commit comments

Comments
 (0)