Skip to content

Commit

Permalink
Merge pull request #367 from BIBSYSDEV/NP-45363-aggregation-facet
Browse files Browse the repository at this point in the history
Np 45363 aggregation facet
  • Loading branch information
StigNorland authored Dec 1, 2023
2 parents fd12e08 + 8e49273 commit 8df7984
Show file tree
Hide file tree
Showing 56 changed files with 12,607 additions and 5,501 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.unit.nva.search.constants;

import static no.unit.nva.search2.constant.Words.FUNDING_SOURCE;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.stream.Stream;
Expand Down Expand Up @@ -41,20 +42,19 @@ public final class ApplicationConstants {
public static final int DEFAULT_AGGREGATION_SIZE = 100;
public static final List<AbstractAggregationBuilder<? extends AbstractAggregationBuilder<?>>>
IMPORT_CANDIDATES_AGGREGATIONS = List.of(
generateSimpleAggregation("importStatus.candidateStatus",
"importStatus.candidateStatus.keyword"),
generateSimpleAggregation("importStatus.candidateStatus", "importStatus.candidateStatus.keyword"),
generateSimpleAggregation("publicationYear", "publicationYear.keyword"),
generateObjectLabelsAggregation("organizations"),
generateHasFileAggregation(),
generateInstanceTypeAggregation(),
generateSimpleAggregation("instanceType", "publicationInstance.type"),
generateSimpleAggregation("collaborationType", "collaborationType.keyword"),
generateImportedByUserAggregation()
);

public static final TermsAggregationBuilder TYPE_TERMS_AGGREGATION = generateSimpleAggregation("type",
"type.keyword");
public static final TermsAggregationBuilder STATUS_TERMS_AGGREGATION = generateSimpleAggregation("status",
"status.keyword");
public static final TermsAggregationBuilder TYPE_TERMS_AGGREGATION =
generateSimpleAggregation("type", "type.keyword");
public static final TermsAggregationBuilder STATUS_TERMS_AGGREGATION =
generateSimpleAggregation("status", "status.keyword");
public static final List<AbstractAggregationBuilder<? extends AbstractAggregationBuilder<?>>> TICKETS_AGGREGATIONS =
List.of(TYPE_TERMS_AGGREGATION,
STATUS_TERMS_AGGREGATION
Expand Down Expand Up @@ -82,7 +82,8 @@ public final class ApplicationConstants {
generateSimpleAggregation("resourceOwner.ownerAffiliation",
"resourceOwner.ownerAffiliation.keyword"),
generateEntityDescriptionAggregation(),
generateFundingSourceAggregation(),
generateSimpleAggregation(FUNDING_SOURCE, jsonPath(FUNDINGS, SOURCE, IDENTIFIER))
.subAggregation(generateLabelsAggregation(jsonPath(FUNDINGS, SOURCE))),
generateHasFileAggregation(),
generateObjectLabelsAggregation(TOP_LEVEL_ORGANIZATIONS)
);
Expand All @@ -101,18 +102,18 @@ private static String readSearchInfrastructureAuthUri() {

private static TermsAggregationBuilder generateSimpleAggregation(String term, String field) {
return AggregationBuilders
.terms(term)
.field(field)
.size(DEFAULT_AGGREGATION_SIZE);
.terms(term)
.field(field)
.size(DEFAULT_AGGREGATION_SIZE);
}

private static FilterAggregationBuilder generateImportedByUserAggregation() {
return new FilterAggregationBuilder(
"importedByUser", new TermQueryBuilder("importStatus.candidateStatus.keyword", "IMPORTED"))
.subAggregation(AggregationBuilders
.terms("importStatus.setBy")
.field("importStatus.setBy.keyword")
.size(DEFAULT_AGGREGATION_SIZE));
.subAggregation(AggregationBuilders
.terms("importStatus.setBy")
.field("importStatus.setBy.keyword")
.size(DEFAULT_AGGREGATION_SIZE));
}

private static NestedAggregationBuilder generateReferenceAggregation() {
Expand All @@ -129,7 +130,7 @@ private static NestedAggregationBuilder generateReferenceAggregation() {

private static TermsAggregationBuilder generatePublicationInstanceTypeAggregation() {
return generateSimpleAggregation(
TYPE, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_INSTANCE, TYPE, KEYWORD));
TYPE, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_INSTANCE, TYPE));
}

private static NestedAggregationBuilder generateNestedPublicationInstanceAggregation() {
Expand All @@ -144,22 +145,22 @@ private static NestedAggregationBuilder generateNestedPublicationContextAggregat

private static TermsAggregationBuilder generatePublicationContextPublisherIdAggregation() {
return generateSimpleAggregation(
PUBLISHER, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, PUBLISHER, IDENTIFIER, KEYWORD));
PUBLISHER, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, PUBLISHER, IDENTIFIER));
}

private static TermsAggregationBuilder generatePublicationContextPublisherNameAggregation() {
return generateSimpleAggregation(
NAME, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, PUBLISHER, NAME, KEYWORD));
NAME, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, PUBLISHER, NAME));
}

private static TermsAggregationBuilder generatePublicationContextJournalIdAggregation() {
return generateSimpleAggregation(
ID, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, IDENTIFIER, KEYWORD));
ID, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, IDENTIFIER));
}

private static TermsAggregationBuilder generatePublicationContextJournalNameAggregation() {
return generateSimpleAggregation(
NAME, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, NAME, KEYWORD));
NAME, jsonPath(ENTITY_DESCRIPTION, REFERENCE, PUBLICATION_CONTEXT, NAME));
}

private static NestedAggregationBuilder generateEntityDescriptionAggregation() {
Expand All @@ -168,28 +169,12 @@ private static NestedAggregationBuilder generateEntityDescriptionAggregation() {
.subAggregation(generateReferenceAggregation());
}

private static TermsAggregationBuilder generateInstanceTypeAggregation() {
return generateSimpleAggregation(TYPE, jsonPath(PUBLICATION_INSTANCE, TYPE));
}

private static NestedAggregationBuilder generateFundingSourceAggregation() {
return
new NestedAggregationBuilder(FUNDINGS, FUNDINGS)
.subAggregation(
generateSimpleAggregation(IDENTIFIER, jsonPath(FUNDINGS, SOURCE, IDENTIFIER, KEYWORD))
.subAggregation(
generateLabelsAggregation(jsonPath(FUNDINGS, SOURCE)))
);
}

private static NestedAggregationBuilder generateContributorAggregations() {
return
generateNestedContributorAggregation()
.subAggregation(
generateNestedIdentityAggregation()
.subAggregation(
generateIdAggregation()
.subAggregation(generateNameAggregation()))
.subAggregation(generateNestedIdentityAggregation()
.subAggregation(generateIdAggregation()
.subAggregation(generateNameAggregation()))
);
}

Expand All @@ -202,12 +187,12 @@ private static NestedAggregationBuilder generateNestedIdentityAggregation() {
}

private static TermsAggregationBuilder generateIdAggregation() {
return generateSimpleAggregation(ID, jsonPath(ENTITY_DESCRIPTION, CONTRIBUTORS, IDENTITY, ID, KEYWORD));
return generateSimpleAggregation(ID, jsonPath(ENTITY_DESCRIPTION, CONTRIBUTORS, IDENTITY, ID));
}

private static TermsAggregationBuilder generateIdAggregation(String object) {
return new TermsAggregationBuilder(ID)
.field(jsonPath(object, ID, KEYWORD))
.field(jsonPath(object, ID))
.size(DEFAULT_AGGREGATION_SIZE)
.subAggregation(generateLabelsAggregation(object));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
import java.net.http.HttpResponse.BodyHandler;
import java.nio.charset.StandardCharsets;
import no.unit.nva.search.CachedJwtProvider;
import no.unit.nva.search2.model.OpenSearchClient;
import no.unit.nva.search2.model.OpenSearchSwsResponse;
import no.unit.nva.search2.model.QueryBuilderSourceWrapper;
import no.unit.nva.search2.common.OpenSearchClient;
import no.unit.nva.search2.common.QueryContentWrapper;
import no.unit.nva.search2.common.SwsResponse;
import nva.commons.core.JacocoGenerated;
import nva.commons.secrets.SecretsReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ImportCandidateClient implements OpenSearchClient<OpenSearchSwsResponse, ImportCandidateQuery> {
public class ImportCandidateClient extends OpenSearchClient<SwsResponse, ImportCandidateQuery> {

private static final Logger logger = LoggerFactory.getLogger(ImportCandidateClient.class);

Expand All @@ -45,7 +45,7 @@ public static ImportCandidateClient defaultClient() {
}

@Override
public OpenSearchSwsResponse doSearch(ImportCandidateQuery query) {
public SwsResponse doSearch(ImportCandidateQuery query) {
return
query.createQueryBuilderStream()
.map(this::createRequest)
Expand All @@ -55,7 +55,7 @@ public OpenSearchSwsResponse doSearch(ImportCandidateQuery query) {
}

@JacocoGenerated
private HttpRequest createRequest(QueryBuilderSourceWrapper qbs) {
private HttpRequest createRequest(QueryContentWrapper qbs) {
logger.info(qbs.source().query().toString());
return HttpRequest
.newBuilder(qbs.requestUri())
Expand All @@ -71,11 +71,11 @@ private HttpResponse<String> fetch(HttpRequest httpRequest) {
}

@JacocoGenerated
private OpenSearchSwsResponse handleResponse(HttpResponse<String> response) {
private SwsResponse handleResponse(HttpResponse<String> response) {
if (response.statusCode() != HTTP_OK) {
throw new RuntimeException(response.body());
}
return attempt(() -> singleLineObjectMapper.readValue(response.body(), OpenSearchSwsResponse.class))
return attempt(() -> singleLineObjectMapper.readValue(response.body(), SwsResponse.class))
.orElseThrow();
}
}
Loading

0 comments on commit 8df7984

Please sign in to comment.