search.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package controllers
  2. import (
  3. "fmt"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hongze_cygx/models"
  6. "hongze/hongze_cygx/services"
  7. "hongze/hongze_cygx/utils"
  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. indexName := utils.IndexName
  55. pageSize = 20
  56. var result []*models.SearchItem
  57. var total int64
  58. var err error
  59. if orderColumn == "PublishDate" {
  60. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, user.UserId)
  61. result = tmpResult
  62. total = tmpTotal
  63. err = tmpErr
  64. } else {
  65. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
  66. //tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId)
  67. result = tmpResult
  68. total = tmpTotal
  69. err = tmpErr
  70. }
  71. //result, total, err := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId) //services.EsMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize) //services.EsMatchQuery(indexName, keyWord)
  72. //result, total, err := services.SearchByKeyWordBack(indexName, keyWord, startSize, pageSize,user.UserId)
  73. //result, total, err := services.EsMultiMatchFunctionScoreQueryFix(indexName, keyWord, startSize, pageSize)
  74. if err != nil {
  75. br.Msg = "检索失败"
  76. br.ErrMsg = "检索失败,Err:" + err.Error()
  77. return
  78. }
  79. if len(result) == 0 {
  80. result = make([]*models.SearchItem, 0)
  81. }
  82. detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
  83. if errKey != nil && errKey.Error() != utils.ErrNoRow() {
  84. br.Msg = "获取信息失败"
  85. br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
  86. return
  87. }
  88. //同一个用户一分钟之内搜索的词不重复记录
  89. if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
  90. //fmt.Println("一分钟之内没有搜索")
  91. keyWordItem := new(models.CygxSearchKeyWord)
  92. keyWordItem.UserId = user.UserId
  93. keyWordItem.KeyWord = keyWord
  94. keyWordItem.CreateTime = time.Now()
  95. go models.AddSearchKeyWord(keyWordItem)
  96. }
  97. for k, _ := range result {
  98. result[k].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
  99. }
  100. resp := new(models.SearchResp)
  101. page := paging.GetPaging(currentIndex, pageSize, int(total))
  102. resp.Paging = page
  103. resp.List = result
  104. br.Ret = 200
  105. br.Success = true
  106. br.Msg = "获取成功"
  107. br.Data = resp
  108. }
  109. //https://blog.csdn.net/my_miuye/article/details/110496025
  110. //search
  111. // @Title 报告搜索接口
  112. // @Description 报告搜索接口
  113. // @Param PageSize query int true "每页数据条数"
  114. // @Param CurrentIndex query int true "当前页页码,从1开始"
  115. // @Param KeyWord query string true "搜索关键词"
  116. // @Success 200 {object} models.SearchItem
  117. // @router /report/list [get]
  118. func (this *SearchController) SearchReport() {
  119. br := new(models.BaseResponse).Init()
  120. defer func() {
  121. this.Data["json"] = br
  122. this.ServeJSON()
  123. }()
  124. pageSize, _ := this.GetInt("PageSize")
  125. currentIndex, _ := this.GetInt("CurrentIndex")
  126. var startSize int
  127. if pageSize <= 0 {
  128. pageSize = utils.PageSize20
  129. }
  130. if currentIndex <= 0 {
  131. currentIndex = 1
  132. }
  133. startSize = paging.StartIndex(currentIndex, pageSize)
  134. keyWord := this.GetString("KeyWord")
  135. if keyWord == "" {
  136. br.Msg = "请输入搜索词"
  137. br.ErrMsg = "请输入搜索词"
  138. return
  139. }
  140. user := this.User
  141. if user == nil {
  142. br.Msg = "请重新登录"
  143. br.Ret = 408
  144. return
  145. }
  146. //indexName := "article_list"
  147. indexName := utils.IndexName
  148. pageSize = 100
  149. var result []*models.SearchItem
  150. var total int64
  151. var err error
  152. tmpResult, tmpTotal, tmpErr := services.EsSearchReport(indexName, keyWord, startSize, pageSize, user.UserId)
  153. result = tmpResult
  154. total = tmpTotal
  155. err = tmpErr
  156. if err != nil {
  157. br.Msg = "检索失败"
  158. br.ErrMsg = "检索失败,Err:" + err.Error()
  159. return
  160. }
  161. if len(result) == 0 {
  162. result = make([]*models.SearchItem, 0)
  163. }
  164. detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
  165. if errKey != nil && errKey.Error() != utils.ErrNoRow() {
  166. br.Msg = "获取信息失败"
  167. br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
  168. return
  169. }
  170. //同一个用户一分钟之内搜索的词不重复记录
  171. if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
  172. //fmt.Println("一分钟之内没有搜索")
  173. keyWordItem := new(models.CygxSearchKeyWord)
  174. keyWordItem.UserId = user.UserId
  175. keyWordItem.KeyWord = keyWord
  176. keyWordItem.CreateTime = time.Now()
  177. go models.AddSearchKeyWord(keyWordItem)
  178. }
  179. resp := new(models.SearchResp)
  180. page := paging.GetPaging(currentIndex, pageSize, int(total))
  181. resp.Paging = page
  182. resp.List = result
  183. br.Ret = 200
  184. br.Success = true
  185. br.Msg = "获取成功"
  186. br.Data = resp
  187. }