Browse Source

增加关键词分类

wangchuanjin 2 năm trước cách đây
mục cha
commit
6456efb260
2 tập tin đã thay đổi với 63 bổ sung2 xóa
  1. 1 1
      matcher/matcher.go
  2. 62 1
      matcher/paymatch.go

+ 1 - 1
matcher/matcher.go

@@ -5,5 +5,5 @@ import (
 )
 
 type Matcher interface {
-	Match(info *map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo)
+	Match(poolSize int, datas *[]map[string]interface{}) (*map[*UserInfo]*SortList, *map[*UserInfo]*[]string)
 }

+ 62 - 1
matcher/paymatch.go

@@ -2,7 +2,10 @@ package matcher
 
 import (
 	"strings"
+	"sync"
 
+	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/logger"
 	. "bp.jydev.jianyu360.cn/BaseService/pushpkg/p"
 )
 
@@ -28,8 +31,66 @@ func NewPayUser() *PayUser {
 	}
 }
 
+//遍历数据
+func (p *PayUser) Match(poolSize int, datas *[]map[string]interface{}) (*map[*UserInfo]*SortList, *map[*UserInfo]*[]string) {
+	defer util.Catch()
+	logger.Info("开始匹配数据。。。")
+	userMap := map[*UserInfo]*SortList{}
+	projectUserMap := map[*UserInfo]*[]string{}
+	lock := &sync.Mutex{}
+	var index int
+	matchPool := make(chan bool, poolSize)
+	matchWaitGroup := &sync.WaitGroup{}
+	for _, temp := range *datas {
+		matchPool <- true
+		matchWaitGroup.Add(1)
+		go func(info map[string]interface{}) {
+			defer util.Catch()
+			defer func() {
+				matchWaitGroup.Done()
+				<-matchPool
+			}()
+			users, projectUsers := p.ToMatch(&info)
+			lock.Lock()
+			defer lock.Unlock()
+			if users != nil && len(*users) > 0 {
+				for k, v := range *users {
+					l := userMap[k]
+					if l == nil {
+						l = &SortList{}
+					}
+					*l = append(*l, &MatchInfo{
+						Info:      &info,
+						Keys:      v.Keys,
+						Items:     v.Items,
+						MatchWays: v.MatchWays,
+					})
+					userMap[k] = l
+				}
+			}
+			if projectUsers != nil && len(*projectUsers) > 0 {
+				for _, v := range *projectUsers {
+					l := projectUserMap[v]
+					if l == nil {
+						l = &[]string{}
+					}
+					*l = append(*l, util.ObjToString(info["_id"]))
+					projectUserMap[v] = l
+				}
+			}
+		}(temp)
+		index++
+		if index%500 == 0 {
+			logger.Info("匹配数据", index)
+		}
+	}
+	matchWaitGroup.Wait()
+	logger.Info("匹配数据结束。。。", index)
+	return &userMap, &projectUserMap
+}
+
 //
-func (p *PayUser) Match(info *map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo) {
+func (p *PayUser) ToMatch(info *map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo) {
 	buyerclass, _ := (*info)["buyerclass"].(string)
 	area, _ := (*info)["area"].(string)
 	if area == "全国" {