diff --git a/pkg/api/api.go b/pkg/api/api.go index a4703e7..7cc63d6 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -313,7 +313,7 @@ func (b *BaseAPI[indexDocument, returnType]) ExpertSearch( results := make([]returnType, 0, len(*searchResponse.Hits)) scores := make(pkgtypesense.Scores) - for _, hit := range *searchResponse.Hits { + for i, hit := range *searchResponse.Hits { docMap := *hit.Document // Extract document ID safely @@ -331,7 +331,7 @@ func (b *BaseAPI[indexDocument, returnType]) ExpertSearch( continue } - results = append(results, doc) + results[i] = doc index := 0 if hit.TextMatchInfo != nil && hit.TextMatchInfo.Score != nil { if score, err := strconv.Atoi(*hit.TextMatchInfo.Score); err == nil { diff --git a/pkg/indexing/contentserver.go b/pkg/indexing/contentserver.go index 4128ad2..58eeb28 100644 --- a/pkg/indexing/contentserver.go +++ b/pkg/indexing/contentserver.go @@ -41,14 +41,8 @@ func (c ContentServer[indexDocument]) Provide( return nil, err } - ids := make([]string, 0, len(documentInfos)) - for _, documentInfo := range documentInfos { - ids = append(ids, string(documentInfo.DocumentID)) - } - - uriMap, err := c.contentserverClient.GetURIs(ctx, string(indexID), ids) + urlsByIDs, err := c.fetchURLsByDocumentIDs(ctx, indexID, documentInfos) if err != nil { - c.l.Error("failed to get URIs", zap.Error(err)) return nil, err } @@ -57,7 +51,7 @@ func (c ContentServer[indexDocument]) Provide( if documentProvider, ok := c.documentProviderFuncs[documentInfo.DocumentType]; !ok { c.l.Warn("no document provider available for document type", zap.String("documentType", string(documentInfo.DocumentType))) } else { - document, err := documentProvider(ctx, indexID, documentInfo.DocumentID, uriMap) + document, err := documentProvider(ctx, indexID, documentInfo.DocumentID, urlsByIDs) if err != nil { c.l.Error( "index document not created", @@ -125,3 +119,31 @@ func createFlatRepoNodeMap(node *content.RepoNode, nodeMap map[string]*content.R } return nodeMap } + +func (c ContentServer[indexDocument]) fetchURLsByDocumentIDs( + ctx context.Context, + indexID typesense.IndexID, + documentInfos []typesense.DocumentInfo, +) (map[typesense.DocumentID]string, error) { + ids := make([]string, len(documentInfos)) + + for i, documentInfo := range documentInfos { + ids[i] = string(documentInfo.DocumentID) + } + + uriMap, err := c.contentserverClient.GetURIs(ctx, string(indexID), ids) + if err != nil { + c.l.Error("failed to get URIs", zap.Error(err)) + return nil, err + } + + return convertMapStringToDocumentID(uriMap), nil +} + +func convertMapStringToDocumentID(input map[string]string) map[typesense.DocumentID]string { + output := make(map[typesense.DocumentID]string, len(input)) + for key, value := range input { + output[typesense.DocumentID(key)] = value + } + return output +} diff --git a/pkg/vo.go b/pkg/vo.go index 3805bbd..b7acbb2 100644 --- a/pkg/vo.go +++ b/pkg/vo.go @@ -19,7 +19,7 @@ type DocumentProviderFunc[indexDocument any] func( ctx context.Context, indexID IndexID, documentID DocumentID, - uriMap map[string]string, + urlsByIDs map[DocumentID]string, ) (*indexDocument, error) type DocumentInfo struct {