12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package stdlib
- import (
- "fmt"
- "log"
- "regexp"
- "strings"
- jyDocsRpcUtil "app.yhyue.com/moapp/jy_docs/services/util"
- "app.yhyue.com/moapp/jybase/common"
- elastic "app.yhyue.com/moapp/jybase/esv7"
- )
- const (
- Es_Query_Boosting = `{"query":{"boosting":{"positive":{"bool":{"must":[%s]}},"negative":{"bool":{"must":[%s]}},"negative_boost":2}}%s}`
- Es_Query_Bool = `{"query":{"bool":{"filter":[%s]}}%s}`
- Es_Query_Append = `,"_source":["_id","docName","price","downTimes","viewTimes","docSummary","uploadDate","docFileSize","docPageSize","docFileType"],"sort":{%s},"from":%d,"size":%d,"highlight":{"fields":{"docName":{},"docSummary":{}}}`
- Multi_Match = `{"multi_match":{"query":"%s","fields":["docName","docSummary"]}}`
- Multi_Match_Phrase = `{"multi_match":{"query":"%s","fields":["docName.docName_c","docSummary.docSummary_c"],"type":"phrase"}}`
- Terms = `{"trems":{"%s":[%s]}}`
- )
- var (
- Reg = regexp.MustCompile(`\s+`)
- )
- func FindDocumentById(id int) {
- log.Println(jyDocsRpcUtil.GetJyDocsDB().Exec("select * from ").Error)
- }
- func FindDocumentsByKeyWords(keyWord string, docClass, docTag []string, publishTimeSort, downloadSort, viewSort, pageNum, pageSize int64) (int64, *[]map[string]interface{}) {
- defer common.Catch()
- keyWord = strings.TrimSpace(keyWord)
- musts := []string{}
- negative_musts := []string{}
- sorts := []string{`"_score":"desc"`}
- //上架时间
- if publishTimeSort > 0 {
- sorts = append(sorts, `"create_at":"asc"`)
- } else if viewSort < 0 {
- sorts = append(sorts, `"create_at":"desc"`)
- }
- //下载量
- if downloadSort > 0 {
- sorts = append(sorts, `"downTimes":"asc"`)
- } else if viewSort < 0 {
- sorts = append(sorts, `"downTimes":"desc"`)
- }
- //浏览量
- if viewSort > 0 {
- sorts = append(sorts, `"viewTimes":"asc"`)
- } else if viewSort < 0 {
- sorts = append(sorts, `"viewTimes":"desc"`)
- }
- //分类
- if len(docClass) > 0 {
- musts = append(musts, fmt.Sprintf(Terms, "docClassLevelOne", strings.Join(docClass, ",")))
- }
- //标签
- if len(docTag) > 0 {
- musts = append(musts, fmt.Sprintf(Terms, "docTags", strings.Join(docTag, ",")))
- }
- //搜索词
- if keyWord != "" {
- for _, v := range strings.Split(keyWord, " ") {
- v = strings.ReplaceAll(v, `"`, `\"`)
- musts = append(musts, fmt.Sprintf(Multi_Match, v))
- negative_musts = append(negative_musts, fmt.Sprintf(Multi_Match_Phrase, v))
- }
- }
- if len(musts) == 0 {
- return 0, nil
- }
- query := ""
- if keyWord != "" {
- query = fmt.Sprintf(Es_Query_Boosting, strings.Join(musts, ","), strings.Join(negative_musts, ","), fmt.Sprintf(Es_Query_Append, strings.Join(sorts, ","), (pageNum-1)*pageSize, pageSize))
- } else {
- query = fmt.Sprintf(Es_Query_Bool, strings.Join(musts, ","), fmt.Sprintf(Es_Query_Append, strings.Join(sorts, ","), (pageNum-1)*pageSize, pageSize))
- }
- log.Println("query:", query)
- return elastic.DfsGet(jyDocsRpcUtil.Es_JyDoc, "", query)
- }
|