public IndexerCoreSearchResponse search()

in search-backend-indexer/src/main/java/org/apache/maven/search/backend/indexer/internal/IndexerCoreSearchBackendImpl.java [94:147]


    public IndexerCoreSearchResponse search(SearchRequest searchRequest) throws IOException {
        Paging paging = searchRequest.getPaging();
        int totalHitsCount;
        List<ArtifactInfo> artifactInfos = new ArrayList<>(paging.getPageSize());
        List<Record> page = new ArrayList<>(paging.getPageSize());

        // if GA present in query: doing flat, otherwise grouped search to mimic SMO
        HashSet<Field> searchedFields = new HashSet<>();
        Query query = toQuery(searchedFields, searchRequest.getQuery());
        if (searchedFields.contains(MAVEN.SHA1)
                || (searchedFields.contains(MAVEN.GROUP_ID) && searchedFields.contains(MAVEN.ARTIFACT_ID))) {
            if (!searchedFields.contains(MAVEN.CLASSIFIER)) {
                query = new BooleanQuery.Builder()
                        .add(new BooleanClause(query, BooleanClause.Occur.MUST))
                        .add(
                                indexer.constructQuery(
                                        org.apache.maven.index.MAVEN.CLASSIFIER,
                                        new SourcedSearchExpression(org.apache.maven.index.Field.NOT_PRESENT)),
                                BooleanClause.Occur.MUST_NOT)
                        .build();
            }
            IteratorSearchRequest iteratorSearchRequest =
                    new IteratorSearchRequest(query, Collections.singletonList(indexingContext));
            iteratorSearchRequest.setCount(paging.getPageSize());
            iteratorSearchRequest.setStart(paging.getPageSize() * paging.getPageOffset());

            try (IteratorSearchResponse iteratorSearchResponse = indexer.searchIterator(iteratorSearchRequest)) {
                totalHitsCount = iteratorSearchResponse.getTotalHitsCount();
                StreamSupport.stream(iteratorSearchResponse.iterator().spliterator(), false)
                        .sorted(ArtifactInfo.VERSION_COMPARATOR)
                        .forEach(ai -> {
                            artifactInfos.add(ai);
                            page.add(convert(ai, null));
                        });
            }
            return new IndexerCoreSearchResponseImpl(searchRequest, totalHitsCount, page, query, artifactInfos);
        } else {
            GroupedSearchRequest groupedSearchRequest =
                    new GroupedSearchRequest(query, new GAGrouping(), indexingContext);

            try (GroupedSearchResponse groupedSearchResponse = indexer.searchGrouped(groupedSearchRequest)) {
                totalHitsCount = groupedSearchResponse.getResults().size();
                groupedSearchResponse.getResults().values().stream()
                        .skip((long) paging.getPageSize() * paging.getPageOffset())
                        .limit(paging.getPageSize())
                        .forEach(aig -> {
                            ArtifactInfo ai = aig.getArtifactInfos().iterator().next();
                            artifactInfos.add(ai);
                            page.add(convert(ai, aig.getArtifactInfos().size()));
                        });
            }
            return new IndexerCoreSearchResponseImpl(searchRequest, totalHitsCount, page, query, artifactInfos);
        }
    }