package util import ( "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" "log" "strings" "sync" ) func HistoryReadyData() { mgo, err := InitMgoEn("mongodb://172.17.4.187:27082,172.17.145.163:27083", 10, "fengweiqiang", "fwq@123123") if err != nil { log.Fatalln(err) } con := mgo.GetCon() if con == nil { log.Fatalln("mgo con err") } cursor, err := con.Database("mixdata").Collection("qyxy_std").Find(nil, bson.M{}, options.Find().SetProjection( bson.M{ "company_name": 1, "company_type": 1, }).SetSort(bson.M{"_id": 1})) if err != nil { log.Fatalln(err) } defer cursor.Close(nil) wg := sync.WaitGroup{} bools := make(chan bool, 10) var num uint64 for tmp := map[string]interface{}{}; cursor.Next(nil); tmp = map[string]interface{}{} { num++ err := cursor.Decode(&tmp) if err != nil { log.Println(err) continue } bools<- true wg.Add(1) go func(t map[string]interface{}) { defer func() { <-bools wg.Done() }() if company_name, ok := t["company_name"].(string); ok { if reglen.MatchString(company_name) || !unstart_strReg.MatchString(company_name) || con_strReg.MatchString(company_name) { return } company_type:= ObjToString(t["company_type"]) if strings.Contains(company_type,"个人")||strings.Contains(company_type,"个体"){ return } //保存企业名 con.Database("mixdata").Collection("unique_qyxy").InsertOne(nil, bson.M{ "qy_name": company_name, }) } }(tmp) if num%1000000 == 0 { log.Println("qyxy_std:", num) } } wg.Wait() log.Println("qyxy_std ok") num = 0 cursormixdata, err := con.Database("mixdata").Collection("qyxy_historyname").Find(nil, bson.M{}, options.Find().SetProjection( bson.M{ "company_name": 1, "company_type": 1, }).SetSort(bson.M{"_id": 1})) if err != nil { log.Fatalln(err) } defer cursormixdata.Close(nil) for tmp := map[string]interface{}{}; cursormixdata.Next(nil); tmp = map[string]interface{}{} { num++ err := cursormixdata.Decode(&tmp) if err != nil { log.Println(err) continue } wg.Add(1) go func(t map[string]interface{}) { bools<- true defer func() { wg.Done() <-bools }() if company_name, ok := t["company_name"].(string); ok { if reglen.MatchString(company_name) || !unstart_strReg.MatchString(company_name) || con_strReg.MatchString(company_name) { return } company_type:= ObjToString(t["company_type"]) if strings.Contains(company_type,"个人")||strings.Contains(company_type,"个体"){ return } //保存企业名 con.Database("mixdata").Collection("unique_qyxy").InsertOne(nil, bson.M{ "qy_name": company_name, }) } }(tmp) if num%1000000 == 0 { log.Println("qyxy_historyname:", num) } } log.Println("qyxy_historyname ok") } //测试方法 func TestData() { //北京建雄建筑集团有限公司 江苏贝尔照明电气有限公司 甘肃三杰软件有限公司 云南和合泰商贸有限公司 //甘肃泓文建筑设计有限公司 天津市静海县龙盛水泥制品厂 中国联通网络通信有限公司张家口市分公司 //广联达软件有限公司河南分公司 上海熊猫机械(集团)有限公司昆明分公司 name:="上海熊猫机械(集团)有限公司昆明分公司" rname, isok, _ ,datas := dealWithNameScoreRules(name) log.Println(rname,isok,len(datas)) }