|
@@ -18,12 +18,19 @@ var (
|
|
//mgo
|
|
//mgo
|
|
MgoH *mongo.MongodbSim
|
|
MgoH *mongo.MongodbSim
|
|
MgoRulesH []*PRule
|
|
MgoRulesH []*PRule
|
|
|
|
+ TagsRules []*KeywordRule
|
|
DbnameH string
|
|
DbnameH string
|
|
CollH string
|
|
CollH string
|
|
MgoSId string
|
|
MgoSId string
|
|
MgoEId string
|
|
MgoEId string
|
|
- //es
|
|
|
|
|
|
+ //mgo log
|
|
|
|
+ logOff bool
|
|
|
|
+ mgoLog *mongo.MongodbSim
|
|
|
|
+ mgoName string
|
|
|
|
+ mgoColl string
|
|
|
|
+ mgoSize int
|
|
|
|
|
|
|
|
+ //es
|
|
EsH *elastic.Elastic
|
|
EsH *elastic.Elastic
|
|
EsRulesH []*PRule
|
|
EsRulesH []*PRule
|
|
Index string
|
|
Index string
|
|
@@ -35,6 +42,12 @@ var (
|
|
data_channel chan bool
|
|
data_channel chan bool
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+//原始标签关键词规则
|
|
|
|
+type KeywordRule struct {
|
|
|
|
+ Id string
|
|
|
|
+ OList []map[string]interface{}
|
|
|
|
+}
|
|
|
|
+
|
|
//初始化mgo信息
|
|
//初始化mgo信息
|
|
func InitMgoInfo() {
|
|
func InitMgoInfo() {
|
|
if mgohistory, ok := Sysconfig["mgohistory"].(map[string]interface{}); ok && mgohistory != nil {
|
|
if mgohistory, ok := Sysconfig["mgohistory"].(map[string]interface{}); ok && mgohistory != nil {
|
|
@@ -51,11 +64,25 @@ func InitMgoInfo() {
|
|
MgoSId = qu.ObjToString(mgohistory["sid"])
|
|
MgoSId = qu.ObjToString(mgohistory["sid"])
|
|
MgoSId = qu.ObjToString(mgohistory["eid"])
|
|
MgoSId = qu.ObjToString(mgohistory["eid"])
|
|
//初始化Rules
|
|
//初始化Rules
|
|
- MgoRulesH = InitRules(qu.ObjToString(mgohistory["tasktype"]))
|
|
|
|
|
|
+ MgoRulesH, TagsRules = InitRules(qu.ObjToString(mgohistory["tasktype"]))
|
|
// for i, r := range MgoRulesH {
|
|
// for i, r := range MgoRulesH {
|
|
// qu.Debug(i, r.TagName, r.KW.KeyReg, len(r.KW.KeyReg), r.KW.MatchType, len(r.KW.MatchType), r.KW.KeyWordMap, "---", r.AW.KeyReg, len(r.AW.KeyReg), r.AW.MatchType, len(r.AW.MatchType), r.AW.AddWordMap)
|
|
// qu.Debug(i, r.TagName, r.KW.KeyReg, len(r.KW.KeyReg), r.KW.MatchType, len(r.KW.MatchType), r.KW.KeyWordMap, "---", r.AW.KeyReg, len(r.AW.KeyReg), r.AW.MatchType, len(r.AW.MatchType), r.AW.AddWordMap)
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
|
|
+ //mgo log
|
|
|
|
+ logOff = Sysconfig["log_off"].(bool)
|
|
|
|
+ if logOff {
|
|
|
|
+ if mgolog, ok := Sysconfig["mgolog"].(map[string]interface{}); ok && mgolog != nil {
|
|
|
|
+ mgoName = qu.ObjToString(mgolog["name"])
|
|
|
|
+ mgoColl = qu.ObjToString(mgolog["coll"])
|
|
|
|
+ mgoLog = &mongo.MongodbSim{
|
|
|
|
+ MongodbAddr: qu.ObjToString(mgolog["mgo"]),
|
|
|
|
+ Size: qu.IntAllDef(mgolog["size"], 20),
|
|
|
|
+ DbName: mgoName,
|
|
|
|
+ }
|
|
|
|
+ MgoH.InitPool()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
//初始化es信息
|
|
//初始化es信息
|
|
@@ -74,7 +101,7 @@ func InitEsInfo() {
|
|
EsSId = qu.ObjToString(eshistory["sid"])
|
|
EsSId = qu.ObjToString(eshistory["sid"])
|
|
EsEId = qu.ObjToString(eshistory["eid"])
|
|
EsEId = qu.ObjToString(eshistory["eid"])
|
|
//初始化Rules
|
|
//初始化Rules
|
|
- EsRulesH = InitRules(qu.ObjToString(eshistory["tasktype"]))
|
|
|
|
|
|
+ EsRulesH, _ = InitRules(qu.ObjToString(eshistory["tasktype"]))
|
|
// for i, r := range EsRulesH {
|
|
// for i, r := range EsRulesH {
|
|
// qu.Debug(i, r.TagName, r.KW.KeyReg, len(r.KW.KeyReg), r.KW.MatchType, len(r.KW.MatchType), r.KW.KeyWordMap, "---", r.AW.KeyReg, len(r.AW.KeyReg), r.AW.MatchType, len(r.AW.MatchType), r.AW.AddWordMap)
|
|
// qu.Debug(i, r.TagName, r.KW.KeyReg, len(r.KW.KeyReg), r.KW.MatchType, len(r.KW.MatchType), r.KW.KeyWordMap, "---", r.AW.KeyReg, len(r.AW.KeyReg), r.AW.MatchType, len(r.AW.MatchType), r.AW.AddWordMap)
|
|
// }
|
|
// }
|
|
@@ -113,6 +140,7 @@ func MgoHistoryData() {
|
|
lock := &sync.Mutex{}
|
|
lock := &sync.Mutex{}
|
|
c := make(chan bool, 10)
|
|
c := make(chan bool, 10)
|
|
update := [][]map[string]interface{}{}
|
|
update := [][]map[string]interface{}{}
|
|
|
|
+ updataLog := []map[string]interface{}{}
|
|
//遍历
|
|
//遍历
|
|
index := 0
|
|
index := 0
|
|
n := int64(0)
|
|
n := int64(0)
|
|
@@ -129,70 +157,74 @@ func MgoHistoryData() {
|
|
}()
|
|
}()
|
|
tmpTagNameMap := map[string][]string{} //记录标签
|
|
tmpTagNameMap := map[string][]string{} //记录标签
|
|
tmpPreTagMap := map[string][]string{} //记录父标签
|
|
tmpPreTagMap := map[string][]string{} //记录父标签
|
|
- GetTags(MgoRulesH, tmp, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
- // for _, ru := range MgoRulesH {
|
|
|
|
- // //全局排除词
|
|
|
|
- // IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
|
- // if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
|
- // continue
|
|
|
|
- // } else {
|
|
|
|
- // //全局附加词
|
|
|
|
- // IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
|
- // if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
|
- // continue
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // L:
|
|
|
|
- // for _, r := range ru.Rule {
|
|
|
|
- // //
|
|
|
|
- // IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
|
- // if IsMatchNotKey { //排除词匹配成功,过滤当前rule
|
|
|
|
- // continue
|
|
|
|
- // }
|
|
|
|
- // //关键词匹配
|
|
|
|
- // for _, kwm := range r.KW.MatchType {
|
|
|
|
- // if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
|
- // text = ProcessData(text)
|
|
|
|
- // for i, kw_reg := range r.KW.KeyReg {
|
|
|
|
- // IsContinue := false
|
|
|
|
- // if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
|
- // if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
|
- // IsContinue = true
|
|
|
|
- // } else if !r.KW.KeyWordMap[i] {
|
|
|
|
- // IsContinue = true
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
|
- // if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
|
- // //tmpTagNameMap[r.TagName] = true
|
|
|
|
- // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
- // break L
|
|
|
|
- // } else {
|
|
|
|
- // for _, awm := range r.AW.MatchType {
|
|
|
|
- // if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
|
- // text = ProcessData(text)
|
|
|
|
- // for j, aw_reg := range r.AW.KeyReg {
|
|
|
|
- // if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
|
- // if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
|
- // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
|
- // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
- // break L
|
|
|
|
- // } else if !r.AW.AddWordMap[j] {
|
|
|
|
- // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
|
- // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
- // break L
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
|
|
+ addMapLog := map[string]interface{}{} //日志信息
|
|
|
|
+ if logOff {
|
|
|
|
+ GetTagsAndLog(MgoRulesH, tmp, tmpTagNameMap, tmpPreTagMap, addMapLog)
|
|
|
|
+ } else {
|
|
|
|
+ GetTags(MgoRulesH, tmp, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
+ }
|
|
|
|
+ //for _, ru := range MgoRulesH {
|
|
|
|
+ // //全局排除词
|
|
|
|
+ // IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
|
+ // if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
|
+ // continue
|
|
|
|
+ // } else {
|
|
|
|
+ // //全局附加词
|
|
|
|
+ // IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
|
+ // if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
|
+ // continue
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ //L:
|
|
|
|
+ // for _, r := range ru.Rule {
|
|
|
|
+ // IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
|
+ // if IsMatchNotKey { //排除词匹配成功,过滤当前rule
|
|
|
|
+ // continue
|
|
|
|
+ // }
|
|
|
|
+ // //关键词匹配
|
|
|
|
+ // for _, kwm := range r.KW.MatchType {
|
|
|
|
+ // if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
|
+ // text = ProcessData(text)
|
|
|
|
+ // for i, kw_reg := range r.KW.KeyReg {
|
|
|
|
+ // IsContinue := false
|
|
|
|
+ // if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
|
+ // if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
|
+ // IsContinue = true
|
|
|
|
+ // } else if !r.KW.KeyWordMap[i] {
|
|
|
|
+ // IsContinue = true
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
|
+ // if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
|
+ // //tmpTagNameMap[r.TagName] = true
|
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
+ // break L
|
|
|
|
+ // } else {
|
|
|
|
+ // for _, awm := range r.AW.MatchType {
|
|
|
|
+ // if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
|
+ // text = ProcessData(text)
|
|
|
|
+ // for j, aw_reg := range r.AW.KeyReg {
|
|
|
|
+ // if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
|
+ // if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
|
+ // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
+ // break L
|
|
|
|
+ // } else if !r.AW.AddWordMap[j] {
|
|
|
|
+ // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
|
+ // break L
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ //}
|
|
addMap := map[string]interface{}{}
|
|
addMap := map[string]interface{}{}
|
|
if len(tmpTagNameMap) > 0 { //有新标签或者历史标签
|
|
if len(tmpTagNameMap) > 0 { //有新标签或者历史标签
|
|
atomic.AddInt64(&n, +1) //n++ 计数
|
|
atomic.AddInt64(&n, +1) //n++ 计数
|
|
@@ -209,6 +241,7 @@ func MgoHistoryData() {
|
|
set["$set"] = addMap
|
|
set["$set"] = addMap
|
|
idAndSet = append(idAndSet, _id) //第一个为查询条件
|
|
idAndSet = append(idAndSet, _id) //第一个为查询条件
|
|
idAndSet = append(idAndSet, set) //第二个为更新内容
|
|
idAndSet = append(idAndSet, set) //第二个为更新内容
|
|
|
|
+ addMap["dataId"] = tmp["_id"]
|
|
update = append(update, idAndSet)
|
|
update = append(update, idAndSet)
|
|
}
|
|
}
|
|
// if len(clearMap) > 0 {
|
|
// if len(clearMap) > 0 {
|
|
@@ -216,7 +249,8 @@ func MgoHistoryData() {
|
|
// }
|
|
// }
|
|
if len(update) > 500 {
|
|
if len(update) > 500 {
|
|
MgoH.UpdateBulk(CollH, update...)
|
|
MgoH.UpdateBulk(CollH, update...)
|
|
- update = [][]map[string]interface{}{} //更新后把数据置空
|
|
|
|
|
|
+ mgoLog.SaveBulk(mgoColl, updataLog...) //mgo日志
|
|
|
|
+ update = [][]map[string]interface{}{} //更新后把数据置空
|
|
}
|
|
}
|
|
lock.Unlock()
|
|
lock.Unlock()
|
|
}(tmp)
|
|
}(tmp)
|
|
@@ -226,7 +260,9 @@ func MgoHistoryData() {
|
|
lock.Lock()
|
|
lock.Lock()
|
|
if len(update) > 0 {
|
|
if len(update) > 0 {
|
|
MgoH.UpdateBulk(CollH, update...)
|
|
MgoH.UpdateBulk(CollH, update...)
|
|
|
|
+ MgoH.SaveBulk(mgoColl, updataLog...)
|
|
update = [][]map[string]interface{}{} //更新后把数据置空
|
|
update = [][]map[string]interface{}{} //更新后把数据置空
|
|
|
|
+ updataLog = []map[string]interface{}{}
|
|
}
|
|
}
|
|
lock.Unlock()
|
|
lock.Unlock()
|
|
log.Println("Update Count:", n)
|
|
log.Println("Update Count:", n)
|
|
@@ -431,4 +467,4 @@ func UpdateEsHistory() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+}
|