summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Magorsch <arzano@gentoo.org>2020-04-28 21:49:33 +0200
committerMax Magorsch <arzano@gentoo.org>2020-04-28 21:49:33 +0200
commiteccd85804e86603c1454fa7bb8d04b29a0261a3e (patch)
tree94bf2fe5fdd6c551c5b3e29d1d40593a92eb4398
parentClean up the code of the changes atom feed (diff)
downloadsoko-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.go13
-rw-r--r--pkg/app/handler/packages/suggest.go3
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 {