package srv_search import ( "context" "hkdj-web-server/pub/esmanager" "hkdj-web-server/pub/models/esmod" "time" ) const esSyncOverlap = time.Minute // needFullESSync 判断是否需要全量同步 ES func needFullESSync(ctx context.Context, esIndex string) (bool, *esmod.ESRecord) { esRecord, serr := esmod.GetRecordTimeByESIndex(ctx, esIndex) if serr != nil || esRecord == nil { return true, esRecord } count, err := esmanager.Instance.Count(esIndex, esmanager.M{ "query": esmanager.M{"match_all": esmanager.M{}}, }) if err != nil || count == 0 { return true, esRecord } now := time.Now() if (now.Hour() >= 5 && esRecord.UpdatedAt.Local().Hour() < 5) || esRecord.UpdatedAt.Local().Day() < now.Day() { return true, esRecord } return false, esRecord } // esSyncSinceTime 取增量同步起点(RecordTime 优先,回退 1 分钟避免边界遗漏) func esSyncSinceTime(esRecord *esmod.ESRecord) time.Time { if esRecord == nil { return time.Time{} } since := esRecord.RecordTime if since.IsZero() { since = esRecord.UpdatedAt } if since.IsZero() { return time.Time{} } return since.Add(-esSyncOverlap) }