search.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package util
  2. import (
  3. "fmt"
  4. "github.com/go-ego/riot"
  5. "github.com/go-ego/riot/types"
  6. "trading-go/common"
  7. )
  8. var searcher = riot.Engine{}
  9. type Index struct {
  10. Id uint `db:"id"`
  11. Desc string `db:"desc"`
  12. Title string `db:"title"`
  13. }
  14. func init() {
  15. searcher.Init(types.EngineOpts{
  16. Using: 3,
  17. GseDict: "zh",
  18. })
  19. var index []Index
  20. db := common.DB
  21. sqlStr := "SELECT id, `desc`, title FROM goods"
  22. err := db.Select(&index, sqlStr)
  23. if err != nil {
  24. fmt.Println("[search engine] ----->>> search engine restore failed")
  25. return
  26. }
  27. for i := 0; i < len(index); i++ {
  28. NewIndex(index[i].Id, index[i].Desc+index[i].Title)
  29. }
  30. }
  31. func NewIndex(ID uint, doc string) {
  32. searcher.Index(fmt.Sprintf("%d", ID), types.DocData{Content: doc}, true)
  33. fmt.Println("[search engine] ----->>> ok")
  34. searcher.Flush()
  35. }
  36. func SearchId(keys string) (ids []string) {
  37. docs := searcher.Search(types.SearchReq{Text: keys}).Docs.(types.ScoredDocs)
  38. for i := 0; i < len(docs); i++ {
  39. ids = append(ids, docs[i].DocId)
  40. }
  41. return
  42. }
  43. func DelIndex(ID uint) {
  44. searcher.RemoveDoc(fmt.Sprintf("%d", ID), true)
  45. fmt.Println("[search engine] ----->>> ok")
  46. searcher.Flush()
  47. }