Improve search

This commit is contained in:
2025-09-08 18:24:07 +08:00
parent d1da0dc948
commit 1ee5d0c9b7
4 changed files with 20 additions and 11 deletions

View File

@@ -440,7 +440,13 @@ func BatchGetResources(ids []uint) ([]model.Resource, error) {
} }
var resources []model.Resource var resources []model.Resource
if err := db.Where("id IN ?", uniqueIds).Find(&resources).Error; err != nil { if err := db.
Where("id IN ?", uniqueIds).
Preload("User").
Preload("Images").
Preload("Tags").
Find(&resources).
Error; err != nil {
return nil, err return nil, err
} }
return resources, nil return resources, nil

View File

@@ -5,7 +5,6 @@ import (
"nysoure/server/dao" "nysoure/server/dao"
"nysoure/server/model" "nysoure/server/model"
"nysoure/server/utils" "nysoure/server/utils"
"regexp"
"strconv" "strconv"
"time" "time"
@@ -21,11 +20,6 @@ type ResourceParams struct {
var index bleve.Index var index bleve.Index
func removeSpaces(s string) string {
reg := regexp.MustCompile(`\s+`)
return reg.ReplaceAllString(s, " ")
}
func createIndex() error { func createIndex() error {
for !dao.IsReady() { for !dao.IsReady() {
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
@@ -39,10 +33,10 @@ func createIndex() error {
} }
for _, r := range res { for _, r := range res {
title := r.Title title := r.Title
title = removeSpaces(title) title = utils.RemoveSpaces(title)
altTitles := make([]string, len(r.AlternativeTitles)) altTitles := make([]string, len(r.AlternativeTitles))
for i, t := range r.AlternativeTitles { for i, t := range r.AlternativeTitles {
altTitles[i] = removeSpaces(t) altTitles[i] = utils.RemoveSpaces(t)
} }
err := index.Index(fmt.Sprintf("%d", r.ID), ResourceParams{ err := index.Index(fmt.Sprintf("%d", r.ID), ResourceParams{
Id: r.ID, Id: r.ID,
@@ -78,7 +72,7 @@ func init() {
} }
func SearchResource(keyword string) (map[uint]time.Time, error) { func SearchResource(keyword string) (map[uint]time.Time, error) {
keyword = removeSpaces(keyword) keyword = utils.RemoveSpaces(keyword)
query := bleve.NewMatchQuery(keyword) query := bleve.NewMatchQuery(keyword)
searchRequest := bleve.NewSearchRequest(query) searchRequest := bleve.NewSearchRequest(query)

View File

@@ -6,6 +6,7 @@ import (
"nysoure/server/dao" "nysoure/server/dao"
"nysoure/server/model" "nysoure/server/model"
"nysoure/server/search" "nysoure/server/search"
"nysoure/server/utils"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@@ -272,7 +273,7 @@ func SearchResource(query string, page int) ([]model.ResourceView, int, error) {
} }
// check tag after removing spaces // check tag after removing spaces
trimmed := strings.ReplaceAll(query, " ", "") trimmed := utils.RemoveSpaces(query)
if trimmed != query { if trimmed != query {
if err := checkTag(trimmed); err != nil { if err := checkTag(trimmed); err != nil {
return nil, 0, err return nil, 0, err

8
server/utils/string.go Normal file
View File

@@ -0,0 +1,8 @@
package utils
import "regexp"
func RemoveSpaces(s string) string {
reg := regexp.MustCompile(`\s+`)
return reg.ReplaceAllString(s, " ")
}