aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd/mbf/internal/pkgserver/search.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/mbf/internal/pkgserver/search.go')
-rw-r--r--cmd/mbf/internal/pkgserver/search.go81
1 files changed, 0 insertions, 81 deletions
diff --git a/cmd/mbf/internal/pkgserver/search.go b/cmd/mbf/internal/pkgserver/search.go
deleted file mode 100644
index 15947804..00000000
--- a/cmd/mbf/internal/pkgserver/search.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package pkgserver
-
-import (
- "cmp"
- "maps"
- "regexp"
- "slices"
- "time"
-)
-
-type searchCache map[string]searchCacheEntry
-type searchResult struct {
- NameIndices [][]int `json:"name_matches"`
- DescIndices [][]int `json:"desc_matches,omitempty"`
- Score float64 `json:"score"`
- *metadata
-}
-type searchCacheEntry struct {
- query string
- results []searchResult
- expiry time.Time
-}
-
-func (index *packageIndex) performSearchQuery(limit int, i int, search string, desc bool) (int, []searchResult, error) {
- query := search
- if desc {
- query += ";withDesc"
- }
- entry, ok := index.search[query]
- if ok && len(entry.results) > 0 {
- return len(entry.results), entry.results[min(i, len(entry.results)-1):min(i+limit, len(entry.results))], nil
- }
-
- regex, err := regexp.Compile(search)
- if err != nil {
- return 0, make([]searchResult, 0), err
- }
- res := make([]searchResult, 0)
- for p := range maps.Values(index.names) {
- nameIndices := regex.FindAllIndex([]byte(p.Name), -1)
- var descIndices [][]int = nil
- if desc {
- descIndices = regex.FindAllIndex([]byte(p.Description), -1)
- }
- if nameIndices == nil && descIndices == nil {
- continue
- }
- score := float64(indexsum(nameIndices)) / (float64(len(nameIndices)) + 1)
- if desc {
- score += float64(indexsum(descIndices)) / (float64(len(descIndices)) + 1) / 10.0
- }
- res = append(res, searchResult{
- NameIndices: nameIndices,
- DescIndices: descIndices,
- Score: score,
- metadata: p,
- })
- }
- slices.SortFunc(res[:], func(a, b searchResult) int { return -cmp.Compare(a.Score, b.Score) })
- expiry := time.Now().Add(1 * time.Minute)
- entry = searchCacheEntry{
- query: search,
- results: res,
- expiry: expiry,
- }
- index.search[query] = entry
-
- return len(res), res[i:min(i+limit, len(entry.results))], nil
-}
-func (s *searchCache) clean() {
- maps.DeleteFunc(*s, func(_ string, v searchCacheEntry) bool {
- return v.expiry.Before(time.Now())
- })
-}
-func indexsum(in [][]int) int {
- sum := 0
- for i := range in {
- sum += in[i][1] - in[i][0]
- }
- return sum
-}