all repos — searchix @ 82cfb98df7f9e38f295d3ea1d46b343914947307

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

feat: support faceted navigation of search results

Alan Pearce
commit

82cfb98df7f9e38f295d3ea1d46b343914947307

parent

d3336c09a291673ab82e259741bd232baf1bbc07

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

changed files
M internal/server/mux.gointernal/server/mux.go
@@ -94,11 +94,18 @@ return
} } - if r.URL.Query().Has("query") { + facets := r.URL.Query() + facets.Del("query") + facets.Del("page") + + if r.URL.Query().Has("query") || len(facets) > 0 { qs := r.URL.Query().Get("query") - ctx := fctx.WithMeta(r.Context(), "search_query", qs) + ctx := r.Context() + if qs != "" { + ctx = fctx.WithMeta(ctx, "search_query", qs) + } - if len(qs) < 2 { + if len(qs) < 2 && len(facets) == 0 { errorHandler(w, r, "Query too short", http.StatusBadRequest) return
@@ -121,7 +128,7 @@ }
page := pagination.New(pageNumber, pageSize) ctx, cancel := context.WithTimeout(ctx, cfg.Web.SearchTimeout.Duration) - results, err := index.Search(ctx, source, qs, page.From, page.Size) + results, err := index.Search(ctx, source, qs, page.From, page.Size, facets) cancel() if err != nil {
@@ -151,8 +158,9 @@ Assets: assets,
Query: qs, SearchNav: components.NewSearchNav(*r.URL).WithPagination(page), }, - Query: qs, - Results: results, + Query: qs, + FacetQueries: facets, + Results: results, } w.Header().Add("Cache-Control", "max-age=300")