search.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package controllers
  2. import (
  3. "github.com/rdlucklib/rdluck_tools/paging"
  4. "hongze/hongze_cygx/models"
  5. "hongze/hongze_cygx/services"
  6. "hongze/hongze_cygx/utils"
  7. "strings"
  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. keyWord := this.GetString("KeyWord")
  38. orderColumn := this.GetString("OrderColumn")
  39. if keyWord == "" {
  40. br.Msg = "请输入搜索词"
  41. br.ErrMsg = "请输入搜索词"
  42. return
  43. }
  44. user := this.User
  45. if user == nil {
  46. br.Msg = "请重新登录"
  47. br.Ret = 408
  48. return
  49. }
  50. //研选的五张图片
  51. detailResearch, errConfig := models.GetConfigByCode("category_research_img_url")
  52. if errConfig != nil {
  53. br.Msg = "获取数据失败"
  54. br.ErrMsg = "获取数据研选分类图片失败,Err:" + errConfig.Error()
  55. return
  56. }
  57. researchList := strings.Split(detailResearch.ConfigValue, "{|}")
  58. //对应分类的所图片
  59. detailCategoryUrl, errConfig := models.GetConfigByCode("category_map_img_url")
  60. if errConfig != nil {
  61. br.Msg = "获取数据失败"
  62. br.ErrMsg = "行业配置信息失败,Err:" + errConfig.Error()
  63. return
  64. }
  65. categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
  66. mapCategoryUrl := make(map[string]string)
  67. var categoryId string
  68. var imgUrlChart string
  69. for _, v := range categoryUrlList {
  70. vslice := strings.Split(v, "_")
  71. categoryId = vslice[0]
  72. imgUrlChart = vslice[len(vslice)-1]
  73. mapCategoryUrl[categoryId] = imgUrlChart
  74. }
  75. if orderColumn == "" {
  76. orderColumn = "Matching"
  77. }
  78. indexName := utils.IndexName
  79. pageSize = 20
  80. var result []*models.SearchItem
  81. var total int64
  82. var err error
  83. if orderColumn == "PublishDate" {
  84. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, user.UserId)
  85. result = tmpResult
  86. total = tmpTotal
  87. err = tmpErr
  88. } else {
  89. tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
  90. result = tmpResult
  91. total = tmpTotal
  92. err = tmpErr
  93. }
  94. if err != nil {
  95. br.Msg = "检索失败"
  96. br.ErrMsg = "检索失败,Err:" + err.Error()
  97. return
  98. }
  99. if len(result) == 0 {
  100. result = make([]*models.SearchItem, 0)
  101. }
  102. detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
  103. if errKey != nil && errKey.Error() != utils.ErrNoRow() {
  104. br.Msg = "获取信息失败"
  105. br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
  106. return
  107. }
  108. //同一个用户一分钟之内搜索的词不重复记录
  109. if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
  110. //fmt.Println("一分钟之内没有搜索")
  111. keyWordItem := new(models.CygxSearchKeyWord)
  112. keyWordItem.UserId = user.UserId
  113. keyWordItem.KeyWord = keyWord
  114. keyWordItem.CreateTime = time.Now()
  115. go models.AddSearchKeyWord(keyWordItem)
  116. }
  117. for k, v := range result {
  118. //如果是研选系列的任意取五张图片的中的一张
  119. if v.CategoryId == "0" {
  120. knum := v.ArticleId % 5
  121. result[k].ImgUrlPc = researchList[knum]
  122. } else {
  123. result[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
  124. }
  125. }
  126. resp := new(models.SearchResp)
  127. page := paging.GetPaging(currentIndex, pageSize, int(total))
  128. resp.Paging = page
  129. resp.List = result
  130. br.Ret = 200
  131. br.Success = true
  132. br.Msg = "获取成功"
  133. br.Data = resp
  134. }
  135. //https://blog.csdn.net/my_miuye/article/details/110496025
  136. //search
  137. // @Title 报告搜索接口
  138. // @Description 报告搜索接口
  139. // @Param PageSize query int true "每页数据条数"
  140. // @Param CurrentIndex query int true "当前页页码,从1开始"
  141. // @Param KeyWord query string true "搜索关键词"
  142. // @Success 200 {object} models.SearchItem
  143. // @router /report/list [get]
  144. func (this *SearchController) SearchReport() {
  145. br := new(models.BaseResponse).Init()
  146. defer func() {
  147. this.Data["json"] = br
  148. this.ServeJSON()
  149. }()
  150. pageSize, _ := this.GetInt("PageSize")
  151. currentIndex, _ := this.GetInt("CurrentIndex")
  152. var startSize int
  153. if pageSize <= 0 {
  154. pageSize = utils.PageSize20
  155. }
  156. if currentIndex <= 0 {
  157. currentIndex = 1
  158. }
  159. startSize = paging.StartIndex(currentIndex, pageSize)
  160. keyWord := this.GetString("KeyWord")
  161. if keyWord == "" {
  162. br.Msg = "请输入搜索词"
  163. br.ErrMsg = "请输入搜索词"
  164. return
  165. }
  166. user := this.User
  167. if user == nil {
  168. br.Msg = "请重新登录"
  169. br.Ret = 408
  170. return
  171. }
  172. //indexName := "article_list"
  173. indexName := utils.IndexName
  174. pageSize = 100
  175. var result []*models.SearchItem
  176. var total int64
  177. var err error
  178. tmpResult, tmpTotal, tmpErr := services.EsSearchReport(indexName, keyWord, startSize, pageSize, user.UserId)
  179. result = tmpResult
  180. total = tmpTotal
  181. err = tmpErr
  182. if err != nil {
  183. br.Msg = "检索失败"
  184. br.ErrMsg = "检索失败,Err:" + err.Error()
  185. return
  186. }
  187. if len(result) == 0 {
  188. result = make([]*models.SearchItem, 0)
  189. }
  190. detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord)
  191. if errKey != nil && errKey.Error() != utils.ErrNoRow() {
  192. br.Msg = "获取信息失败"
  193. br.ErrMsg = "获取信息失败,Err:" + errKey.Error()
  194. return
  195. }
  196. //同一个用户一分钟之内搜索的词不重复记录
  197. if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) {
  198. //fmt.Println("一分钟之内没有搜索")
  199. keyWordItem := new(models.CygxSearchKeyWord)
  200. keyWordItem.UserId = user.UserId
  201. keyWordItem.KeyWord = keyWord
  202. keyWordItem.CreateTime = time.Now()
  203. go models.AddSearchKeyWord(keyWordItem)
  204. }
  205. resp := new(models.SearchResp)
  206. page := paging.GetPaging(currentIndex, pageSize, int(total))
  207. resp.Paging = page
  208. resp.List = result
  209. br.Ret = 200
  210. br.Success = true
  211. br.Msg = "获取成功"
  212. br.Data = resp
  213. }