You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strings" |
|
|
|
"go-common/app/admin/main/search/dao" |
|
"go-common/app/admin/main/search/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
// Upsert upsert docs. |
|
func (s *Service) Upsert(c context.Context, up *model.UpsertParams, dataBody map[string][]model.MapData) (err error) { |
|
app, ok := s.queryConf[up.Business] |
|
if app2, ok2 := model.QueryConf[up.Business]; ok2 { |
|
app = app2 |
|
ok = true |
|
} |
|
if !ok { |
|
err = fmt.Errorf("up.Business(%s) not exists in queryConf", up.Business) |
|
return |
|
} |
|
if app.ESCluster == "" { |
|
err = fmt.Errorf("app(%+v) escluster is empty", app) |
|
return |
|
} |
|
// dataBody to upsertBody |
|
up.UpsertBody = []model.UpsertBody{} |
|
for indexName, docs := range dataBody { |
|
if !strings.Contains(indexName, app.IndexPrefix) { |
|
log.Error("invalid indexName (%s)", indexName) |
|
continue |
|
} |
|
for _, doc := range docs { |
|
indexID := doc.StrID(app.IndexID) |
|
//TODO 提前告知base不对 |
|
if indexID == "" { |
|
continue |
|
} |
|
upsert := model.UpsertBody{IndexName: indexName, IndexType: app.IndexType, IndexID: indexID, Doc: doc} |
|
up.UpsertBody = append(up.UpsertBody, upsert) |
|
} |
|
} |
|
if err = s.dao.UpsertBulk(c, app.ESCluster, up); err != nil { |
|
dao.PromError(fmt.Sprintf("es:%s 更新失败", app.ESCluster), "s.dao.UpsertBulk error(%v) ", err) |
|
err = ecode.SearchUpdateIndexFailed |
|
} |
|
return |
|
}
|
|
|