来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83 项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet 测试目录 /server/hkdj_net,App/Web API 30331/30332 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
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)
|
|
}
|