package main import ( "context" "encoding/json" "fmt" "github.com/olivere/elastic/v7" "log" "os" "time" ) // 深度分页 // https://www.cnblogs.com/hello-shf/p/11543453.html var client elastic.Client func main() { var host = "http://10.10.14.188:9200/" esClient, err := elastic.NewClient( elastic.SetURL(host), elastic.SetSniff(false), elastic.SetHealthcheckInterval(10*time.Second), elastic.SetGzip(true), elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)), elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags))) if err != nil { panic(err) } //取所有 CTX := context.Background() result, err := esClient.Scroll().Index("user_teacher").Size(10).Do(CTX) if err != nil { fmt.Println(err.Error()) } //第一次的结果集 for i := range result.Hits.Hits { resByte, _ := json.Marshal(result.Hits.Hits[i]) resStr := string(resByte) fmt.Println(resStr) } //继续用的 scoll_id scrollId := result.ScrollId //第一次命中的个数 var nowCount = int64(len(result.Hits.Hits)) //总的命中个数 allCount := result.TotalHits() //开始循环 for { fmt.Println(nowCount) //如果还有数据没有获取 if allCount > nowCount { result, err = esClient.Scroll().ScrollId(scrollId).Do(CTX) scrollId = result.ScrollId nowCount += int64(len(result.Hits.Hits)) for i := range result.Hits.Hits { resByte, _ := json.Marshal(result.Hits.Hits[i]) resStr := string(resByte) fmt.Println(resStr) } } else { //没有数据了 break } } }