docService.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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, docClass, docTag []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(docClass) > 0 {
  51. musts = append(musts, fmt.Sprintf(Terms, "docClassLevelOne", strings.Join(docClass, ",")))
  52. }
  53. //标签
  54. if len(docTag) > 0 {
  55. musts = append(musts, fmt.Sprintf(Terms, "docTags", strings.Join(docTag, ",")))
  56. }
  57. //搜索词
  58. if keyWord != "" {
  59. for _, v := range strings.Split(keyWord, " ") {
  60. v = strings.ReplaceAll(v, `"`, `\"`)
  61. musts = append(musts, fmt.Sprintf(Multi_Match, v))
  62. negative_musts = append(negative_musts, fmt.Sprintf(Multi_Match_Phrase, v))
  63. }
  64. }
  65. if len(musts) == 0 {
  66. return 0, nil
  67. }
  68. query := ""
  69. if keyWord != "" {
  70. fmt.Sprintf(Es_Query_Boosting, strings.Join(musts, ","), strings.Join(negative_musts, ","), fmt.Sprintf(Es_Query_Append, strings.Join(sorts, ","), (pageNum-1)*pageSize, pageSize))
  71. } else {
  72. fmt.Sprintf(Es_Query_Bool, strings.Join(musts, ","), fmt.Sprintf(Es_Query_Append, strings.Join(sorts, ","), (pageNum-1)*pageSize, pageSize))
  73. }
  74. log.Println("query:", query)
  75. return elastic.DfsGet(jyDocsRpcUtil.Es_JyDoc, "", query)
  76. }