search.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package controllers
  2. import (
  3. "fmt"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/services"
  6. "hongze/hongze_cygx/utils"
  7. "rdluck_tools/paging"
  8. "time"
  9. )
  10. type SearchController struct {
  11. BaseAuthController
  12. }
  13. // @Title 搜索接口
  14. // @Description 搜索接口
  15. // @Param PageSize query int true "每页数据条数"
  16. // @Param CurrentIndex query int true "当前页页码,从1开始"
  17. // @Param KeyWord query string true "搜索关键词"
  18. // @Param OrderColumn query int true "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
  19. // @Success 200 {object} models.SearchItem
  20. // @router /list [get]
  21. func (this *SearchController) SearchList() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. pageSize, _ := this.GetInt("PageSize")
  28. currentIndex, _ := this.GetInt("CurrentIndex")
  29. var startSize int
  30. if pageSize <= 0 {
  31. pageSize = utils.PageSize20
  32. }
  33. if currentIndex <= 0 {
  34. currentIndex = 1
  35. }
  36. startSize = paging.StartIndex(currentIndex, pageSize)
  37. fmt.Println(startSize)
  38. keyWord := this.GetString("KeyWord")
  39. orderColumn := this.GetString("OrderColumn")
  40. if keyWord == "" {
  41. br.Msg = "请输入搜索词"
  42. br.ErrMsg = "请输入搜索词"
  43. return
  44. }
  45. user := this.User
  46. if user == nil {
  47. br.Msg = "请重新登录"
  48. br.Ret = 408
  49. return
  50. }
  51. if orderColumn == "" {
  52. orderColumn = "Matching"
  53. }
  54. /*
  55. categoryList, err := models.GetCategoryByCompanyId(user.CompanyId)
  56. if err != nil {
  57. br.Msg = "检索失败!"
  58. br.ErrMsg = "检索分类信息失败,Err:" + err.Error()
  59. return
  60. }
  61. var categoryNameArr []string
  62. for _, v := range categoryList {
  63. categoryNameArr = append(categoryNameArr, v.CategoryName)
  64. }
  65. categoryName := strings.Join(categoryNameArr, ",")
  66. */
  67. //indexName := "article_list"
  68. indexName := utils.IndexName
  69. pageSize = 20
  70. var result []*models.SearchItem
  71. var total int64
  72. var err error
  73. if orderColumn == "PublishDate" {
  74. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, user.UserId)
  75. result = tmpResult
  76. total = tmpTotal
  77. err = tmpErr
  78. } else {
  79. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
  80. //tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId)
  81. result = tmpResult
  82. total = tmpTotal
  83. err = tmpErr
  84. }
  85. //result, total, err := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId) //services.EsMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize) //services.EsMatchQuery(indexName, keyWord)
  86. //result, total, err := services.SearchByKeyWordBack(indexName, keyWord, startSize, pageSize,user.UserId)
  87. //result, total, err := services.EsMultiMatchFunctionScoreQueryFix(indexName, keyWord, startSize, pageSize)
  88. if err != nil {
  89. br.Msg = "检索失败"
  90. br.ErrMsg = "检索失败,Err:" + err.Error()
  91. return
  92. }
  93. if len(result) == 0 {
  94. result = make([]*models.SearchItem, 0)
  95. }
  96. detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
  97. if errKey != nil && errKey.Error() != utils.ErrNoRow() {
  98. br.Msg = "获取信息失败"
  99. br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
  100. return
  101. }
  102. //同一个用户一分钟之内搜索的词不重复记录
  103. if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
  104. //fmt.Println("一分钟之内没有搜索")
  105. keyWordItem := new(models.CygxSearchKeyWord)
  106. keyWordItem.UserId = user.UserId
  107. keyWordItem.KeyWord = keyWord
  108. keyWordItem.CreateTime = time.Now()
  109. go models.AddSearchKeyWord(keyWordItem)
  110. }
  111. resp := new(models.SearchResp)
  112. page := paging.GetPaging(currentIndex, pageSize, int(total))
  113. resp.Paging = page
  114. resp.List = result
  115. br.Ret = 200
  116. br.Success = true
  117. br.Msg = "获取成功"
  118. br.Data = resp
  119. }
  120. //https://blog.csdn.net/my_miuye/article/details/110496025
  121. //search