package eu.dnetlib.scholix.api.controller; import eu.dnetlib.common.controller.AbstractDnetController; import eu.dnetlib.dhp.schema.sx.scholix.ScholixIdentifier; import eu.dnetlib.scholix.api.model.v2.PageResultType; import io.micrometer.core.annotation.Timed; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import eu.dnetlib.dhp.schema.sx.scholix.Scholix; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.NestedQueryBuilder; import org.elasticsearch.index.query.TermQueryBuilder; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.Query; import org.elasticsearch.index.query.QueryBuilders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Collections; @RestController @RequestMapping("/v2") @Api(tags = { "Links : Operation related to the Scholix Links" }) public class ScholixControllerV2 extends AbstractDnetController { @Autowired ElasticsearchOperations elasticsearchTemplate; @Timed(value = "scholix.v2.links", description = "Time taken to return links on Version 2.0 of Scholix") @ApiOperation("Get Scholix Links") @GetMapping("/Links") public PageResultType links( @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships collected from a LinkProvider") String linkProvider, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a target pid") String targetPid, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a target pid type") String targetPidType, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a target published in a Publisher named targetPublisher") String targetPublisher, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a target type (literature, dataset, unknown)") String targetType, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a source pid") String sourcePid, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a source pid type") String sourcePidType, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a source published in a Publisher named sourcePublisher") String sourcePublisher, @Parameter(in = ParameterIn.QUERY, description = "Filter Scholix relationships having a source type (literature, dataset, unknown)") String sourceType, @Parameter(in = ParameterIn.QUERY, description = "Filter scholix Links having collected after this date") String harvestedAfter, @Parameter(in = ParameterIn.QUERY, description = "select page of result") Integer page) throws Exception { NestedQueryBuilder nb = new NestedQueryBuilder("source.identifier", new TermQueryBuilder("source.identifier.schema", "pdb"), ScoreMode.None); NativeSearchQuery doiquery = new NativeSearchQueryBuilder() .withQuery(nb) .withPageable(PageRequest.of(1,10)) .build(); long tt = elasticsearchTemplate.count(doiquery, Scholix.class, IndexCoordinates.of("dli_scholix")); System.out.println(tt); SearchHits result = elasticsearchTemplate.search(doiquery, Scholix.class, IndexCoordinates.of("dli_scholix")); final PageResultType pageResult = new PageResultType(); pageResult.setTotalPages((int) tt ); return pageResult; } }