docService.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package stdlib
  2. import (
  3. "fmt"
  4. "log"
  5. "regexp"
  6. "strings"
  7. jyDocsRpcUtil "app.yhyue.com/moapp/jy_docs/services/util"
  8. "app.yhyue.com/moapp/jybase/common"
  9. elastic "app.yhyue.com/moapp/jybase/esv7"
  10. )
  11. const (
  12. Es_Query_Boosting = `{"query":{"boosting":{"positive":{"bool":{"must":[%s]}},"negative":{"bool":{"must":[%s]}},"negative_boost":2}}%s}`
  13. Es_Query_Bool = `{"query":{"bool":{"filter":[%s]}}%s}`
  14. Es_Query_Append = `,"_source":["title","publishtime"],"sort":{%s},"from":%d,"size":%d,"highlight":{"fields":{"docName":{},"docSummary":{}}}`
  15. Multi_Match = `{"multi_match":{"query":"%s","fields":["docName","docSummary"]}}`
  16. Multi_Match_Phrase = `{"multi_match":{"query":"%s","fields":["docName.docName_c","docSummary.docSummary_c"],"type":"phrase"}}`
  17. Terms = `{"trems":{"%s":[%s]}}`
  18. )
  19. var (
  20. Reg = regexp.MustCompile(`\s+`)
  21. )
  22. func FindDocumentById(id int) {
  23. log.Println(jyDocsRpcUtil.GetJyDocsDB().Exec("select * from ").Error)
  24. }
  25. func FindDocumentsByKeyWords(keyWord string, classLevelOne, classLevelTwo, tag []string, publishTimeSort, downloadSort, viewSort, pageNum, pageSize int64) (int64, *[]map[string]interface{}) {
  26. defer common.Catch()
  27. keyWord = strings.TrimSpace(keyWord)
  28. musts := []string{}
  29. negative_musts := []string{}
  30. sorts := []string{`"_score":"desc"`}
  31. //上架时间
  32. if publishTimeSort > 0 {
  33. sorts = append(sorts, `"create_at":"asc"`)
  34. } else if viewSort < 0 {
  35. sorts = append(sorts, `"create_at":"desc"`)
  36. }
  37. //下载量
  38. if downloadSort > 0 {
  39. sorts = append(sorts, `"downTimes":"asc"`)
  40. } else if viewSort < 0 {
  41. sorts = append(sorts, `"downTimes":"desc"`)
  42. }
  43. //浏览量
  44. if viewSort > 0 {
  45. sorts = append(sorts, `"viewTimes":"asc"`)
  46. } else if viewSort < 0 {
  47. sorts = append(sorts, `"viewTimes":"desc"`)
  48. }
  49. //一级分类
  50. if len(classLevelOne) > 0 {
  51. musts = append(musts, fmt.Sprintf(Terms, "docClassLevelOne", strings.Join(classLevelOne, ",")))
  52. }
  53. //二级分类
  54. if len(classLevelTwo) > 0 {
  55. musts = append(musts, fmt.Sprintf(Terms, "docClassLevelTwo", strings.Join(classLevelTwo, ",")))
  56. }
  57. //标签
  58. if len(tag) > 0 {
  59. musts = append(musts, fmt.Sprintf(Terms, "docTags", strings.Join(tag, ",")))
  60. }
  61. //搜索词
  62. if keyWord != "" {
  63. for _, v := range strings.Split(keyWord, " ") {
  64. v = strings.ReplaceAll(v, `"`, `\"`)
  65. musts = append(musts, fmt.Sprintf(Multi_Match, v))
  66. negative_musts = append(negative_musts, fmt.Sprintf(Multi_Match_Phrase, v))
  67. }
  68. }
  69. if len(musts) == 0 {
  70. return 0, nil
  71. }
  72. query := ""
  73. if keyWord != "" {
  74. query = Es_Query_Boosting
  75. } else {
  76. query = Es_Query_Bool
  77. }
  78. query = fmt.Sprintf(query, strings.Join(musts, ","), fmt.Sprintf(Es_Query_Append, strings.Join(sorts, ","), (pageNum-1)*pageSize, pageSize))
  79. log.Println("query:", query)
  80. return elastic.DfsGet(jyDocsRpcUtil.Es_JyDoc, "", query)
  81. }