func (r *River) makeInsertReqData(req *elastic.BulkRequest, rule *Rule, values []interface{}) { req.Data = make(map[string]interface{}, len(values)) req.Action = elastic.ActionIndex for i, c := range rule.TableInfo.Columns { mapped := false for k, v := range rule.FieldMapping { mysql, elastic, fieldType := r.getFieldParts(k, v) if mysql == c.Name { mapped = true v := r.makeReqColumnData(&c, values[i]) if fieldType == fieldTypeList { if str, ok := v.(string); ok { req.Data[elastic] = strings.Split(str, ",") } else { req.Data[elastic] = v } } else { req.Data[elastic] = v } } } if mapped == false { req.Data[c.Name] = r.makeReqColumnData(&c, values[i]) } } }
func (r *River) makeInsertReqData(req *elastic.BulkRequest, rule *Rule, values []interface{}) { req.Data = make(map[string]interface{}, len(values)) req.Action = elastic.ActionIndex for i, c := range rule.TableInfo.Columns { if name, ok := rule.FieldMapping[c.Name]; ok { // has custom field mapping req.Data[name] = r.makeReqColumnData(&c, values[i]) } else { req.Data[c.Name] = r.makeReqColumnData(&c, values[i]) } } }
func (r *River) makeUpdateReqData(req *elastic.BulkRequest, rule *Rule, beforeValues []interface{}, afterValues []interface{}) { req.Data = make(map[string]interface{}, len(beforeValues)) // maybe dangerous if something wrong delete before? req.Action = elastic.ActionUpdate for i, c := range rule.TableInfo.Columns { if beforeValues[i] == afterValues[i] { //nothing changed continue } if name, ok := rule.FieldMapping[c.Name]; ok { // has custom field mapping req.Data[name] = r.makeReqColumnData(&c, afterValues[i]) } else { req.Data[c.Name] = r.makeReqColumnData(&c, afterValues[i]) } } }
func (r *River) makeUpdateReqData(req *elastic.BulkRequest, rule *Rule, beforeValues []interface{}, afterValues []interface{}) { req.Data = make(map[string]interface{}, len(beforeValues)) // maybe dangerous if something wrong delete before? req.Action = elastic.ActionUpdate for i, c := range rule.TableInfo.Columns { mapped := false if reflect.DeepEqual(beforeValues[i], afterValues[i]) { //nothing changed continue } for k, v := range rule.FieldMapping { mysql, elastic, fieldType := r.getFieldParts(k, v) if mysql == c.Name { mapped = true // has custom field mapping v := r.makeReqColumnData(&c, afterValues[i]) str, ok := v.(string) if ok == false { req.Data[c.Name] = v } else { if fieldType == fieldTypeList { req.Data[elastic] = strings.Split(str, ",") } else { req.Data[elastic] = str } } } } if mapped == false { req.Data[c.Name] = r.makeReqColumnData(&c, afterValues[i]) } } }