Files
2026-10-27 16:44:55 +08:00

48 lines
1.1 KiB
Go

package srv_search
import (
"context"
"time"
"videoweb/pub/esmanager"
"videoweb/pub/models/esmod"
)
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)
}