all repos — searchix @ 973345ad50f9b237714fcb364cf7f665b3909f9d

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: paginate search results

Alan Pearce
commit

973345ad50f9b237714fcb364cf7f665b3909f9d

parent

f459e84ecf7307fe2eeb7fbaa5b0c50613ec04f4

1 file changed, 8 insertions(+), 6 deletions(-)

changed files
M internal/search/search.gointernal/search/search.go
@@ -15,7 +15,7 @@ "github.com/mitchellh/mapstructure"
"github.com/pkg/errors" ) -const maxResults = 10 +const ResultsPerPage = 20 type Result[T options.NixOption] struct { *bleve.SearchResult
@@ -93,9 +93,14 @@ &docs,
}, nil } -func (index *Index[T]) Search(ctx context.Context, keyword string) (*Result[T], error) { +func (index *Index[T]) Search(ctx context.Context, keyword string, from uint64) (*Result[T], error) { query := bleve.NewMatchQuery(keyword) search := bleve.NewSearchRequest(query) + search.Size = ResultsPerPage + + if from != 0 { + search.From = int(from) + } bleveResult, err := index.index.SearchInContext(ctx, search) select {
@@ -106,13 +111,10 @@ if err != nil {
return nil, errors.WithMessage(err, "failed to execute search query") } - results := make([]T, min(maxResults, bleveResult.Total)) + results := make([]T, min(ResultsPerPage, bleveResult.Total)) for i, result := range bleveResult.Hits { doc, _ := index.docs.Load(result.ID) results[i] = doc.(T) - if i > maxResults { - break - } } return &Result[T]{