diff options
author | 2020-04-28 21:49:33 +0200 | |
---|---|---|
committer | 2020-04-28 21:49:33 +0200 | |
commit | eccd85804e86603c1454fa7bb8d04b29a0261a3e (patch) | |
tree | 94bf2fe5fdd6c551c5b3e29d1d40593a92eb4398 | |
parent | Clean up the code of the changes atom feed (diff) | |
download | soko-eccd85804e86603c1454fa7bb8d04b29a0261a3e.tar.gz soko-eccd85804e86603c1454fa7bb8d04b29a0261a3e.tar.bz2 soko-eccd85804e86603c1454fa7bb8d04b29a0261a3e.zip |
Improve the search for packages
Signed-off-by: Max Magorsch <arzano@gentoo.org>
-rw-r--r-- | pkg/app/handler/packages/search.go | 13 | ||||
-rw-r--r-- | pkg/app/handler/packages/suggest.go | 3 |
2 files changed, 14 insertions, 2 deletions
diff --git a/pkg/app/handler/packages/search.go b/pkg/app/handler/packages/search.go index 46643c4..f737682 100644 --- a/pkg/app/handler/packages/search.go +++ b/pkg/app/handler/packages/search.go @@ -8,6 +8,7 @@ import ( "net/http" "soko/pkg/database" "soko/pkg/models" + "strings" ) // Search renders a template containing a list of search results @@ -15,10 +16,11 @@ import ( func Search(w http.ResponseWriter, r *http.Request) { searchTerm := getParameterValue("q", r) + searchQuery := buildSearchQuery(searchTerm) var packages []models.Package err := database.DBCon.Model(&packages). - Where("atom LIKE ? ", ("%" + searchTerm + "%")). + Where(searchQuery). Relation("Versions"). Select() if err != nil && err != pg.ErrNoRows { @@ -33,3 +35,12 @@ func Search(w http.ResponseWriter, r *http.Request) { getSearchData(packages, searchTerm), w) } + +func buildSearchQuery(searchString string) string { + var searchClauses []string + for _, searchTerm := range strings.Split(searchString, " "){ + searchClauses = append(searchClauses, + "(ARRAY[atom, category, name] && ARRAY['" + searchTerm +"'] OR (maintainers @> '[{\"Name\": \"" + searchTerm + "\"}]' OR maintainers @> '[{\"Email\": \"" + searchTerm + "\"}]'))") + } + return strings.Join(searchClauses, " AND ") +} diff --git a/pkg/app/handler/packages/suggest.go b/pkg/app/handler/packages/suggest.go index 9c2d082..20da6fe 100644 --- a/pkg/app/handler/packages/suggest.go +++ b/pkg/app/handler/packages/suggest.go @@ -15,10 +15,11 @@ import ( func Suggest(w http.ResponseWriter, r *http.Request) { searchTerm := getParameterValue("q", r) + searchQuery := buildSearchQuery(searchTerm) var packages []models.Package err := database.DBCon.Model(&packages). - Where("atom LIKE ? ", ("%" + searchTerm + "%")). + Where(searchQuery). Relation("Versions"). Select() if err != nil && err != pg.ErrNoRows { |